【问题标题】:No Visible Text Results from Python XPATH Selenium ElementsPython XPATH Selenium Elements 没有可见的文本结果
【发布时间】:2019-11-17 00:10:07
【问题描述】:

我想在 Python 上使用 selenium 提取“首次发布”日期,但即使在通过浏览器的检查选项卡查找 xpath 时获得了成功的结果,我在尝试获得任何可见日期结果时也遇到了问题,我确实得到了元素的成功长度结果,但我的控制台上没有日期的文本结果。

我的代码:

import time

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'C:\\Users\\MyComputer\\PycharmProjects\\SeleniumProject\\venv\\Lib\site-packages\\selenium\\webdriver\\common\\geckodriver.exe')
driver.get('https://tools.cisco.com/security/center/publicationListing.x?resourceIDs=93036,5834,80720&apply=1,1,1&totalbox=3&pt0=Cisco&cp0=93036&pt1=Cisco&cp1=5834&pt2=Cisco&cp2=80720#~FilterByProduct')

time.sleep(20)

prices = driver.find_elements_by_xpath('//span[@class="ng-binding" and contains(text(),"GMT")]')

for post in prices:
    if post.text != "":
        print(post.text)

print(len(prices))

driver.close()

我已经在网站上尝试了其他 visible xpaths 来测试 python,当你打开链接时,我可以看到屏幕上显示的 20 个漏洞标题,所以我假设我必须告诉 selenium 单击每个链接并提取日期并为每个标题执行此操作?但是,我怎样才能通过浏览器检查选项卡一次性获得它们呢?

感谢所有帮助, 谢谢,

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    Selenium 只能检索可见文本。如果你不想打开所有隐藏的部分,你可以使用get_attribute('textContent')get_attribute('innerText')

    for post in prices:
        print(post.get_attribute('innerText'))
    

    【讨论】:

    • 我之前尝试过该选项,但仍然没有结果,@Rock 的代码运行良好,不过谢谢。
    • 在 ChromeDriver 上重试了该命令并像魅力一样工作,以前的建议答案显示了可见日期而不是我想要的不可见日期。非常感谢您的建议先生。
    【解决方案2】:

    如果您想获取首次发布日期,请找到解决方案

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium import webdriver
    
    
    
    driver = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")
    driver.maximize_window()
    
    driver.get("https://tools.cisco.com/security/center/publicationListing.x?resourceIDs=93036,5834,80720&apply=1,1,1&totalbox=3&pt0=Cisco&cp0=93036&pt1=Cisco&cp1=5834&pt2=Cisco&cp2=80720#~FilterByProduct")
    print driver.current_url
    
    element = WebDriverWait(driver, 15).until(EC.visibility_of_element_located((By.XPATH, "//div[@id='tab-2']//tr[1]//td[1]//table[1]//tbody[1]//tr[1]/td[4]/span")))
    print element.text
    

    如果您想打印所有日期

    dates = WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, "//div[@id='tab-2']//tr[*]//td[1]//table[1]//tbody[1]//tr[*]/td[4]/span")))
    print(len(dates))
    
    
    for date in dates:
        print date.text
    

    【讨论】:

    • 非常感谢您抽出宝贵时间,感谢您,现在性能和结果都非常顺利!
    • @ZekiRamahi:对不起,伙计,但根据你之前的评论,我认为你的问题已经解决了
    • 很抱歉删除您的评论作为答案,但您的代码向我显示了“可见”日期,即“更新日期”,我想要存储在每个可以看到的漏洞中的“发布日期”当您单击它们时。但是,性能升级显着提升了代码的运行时间。不过还是谢谢你。
    • 很酷,但是如果您的问题没有解决,我可以请求您,然后请提及并且不要接受以后的回答;)
    猜你喜欢
    • 2022-11-04
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2013-09-28
    • 2021-01-06
    • 2013-06-23
    相关资源
    最近更新 更多