【问题标题】:Selenium - find element by link textSelenium - 通过链接文本查找元素
【发布时间】:2018-10-26 10:58:58
【问题描述】:

我在 Chrome 上使用selenium webdriverpython 3 在 Windows 10 上。 我想从数据库中抓取一些报告。我使用公司 ID 和年份进行搜索,结果是以特定方式格式化的链接列表:类似于year_companyID_seeminglyRandomDateAndDoctype.extension,例如2018_2330_20020713F04.pdf。我想获取某种文档类型的所有 pdf。我可以使用webdriver.find_elements_by_partial_link_text('F04') 获取某个文档类型的所有链接,或者使用'.pdf' 而不是'F04' 获取所有扩展名,但我无法找到同时检查两者的方法。首先我尝试了类似

links = webdriver.find_elements_by_partial_link_text('F04')
for l in links:
    if l.find('.pdf') == -1:
        continue
    else:
        #do some stuff

但不幸的是,链接是 WebElements:

print(links[0])
>> <selenium.webdriver.remote.webelement.WebElement (session="78494f3527260607202e68f6d93668fe", element="0.8703868381417961-1")>
print(links[0].get_attribute('href'))
>> javascript:readfile2("F","2330","2015_2330_20160607F04.pdf")

所以上面for 循环中的条件失败了。

我发现无论该对象是什么,我都可以访问必要的信息,但我更愿意在获取链接时先进行检查。 有没有办法检查webdriver.find_elements_by_* 方法中的多个条件?

【问题讨论】:

  • 您确定links = webdriver.find_elements_by_partial_link_text('F04') 返回的不是WebElement 列表,而是javascript 对象?你的意思是print(links[0].get_attribute('href')) 还是print(links[0].text)
  • 抱歉,我把它和我之前尝试使用的另一种方法混为一谈 - 已修复。

标签: python-3.x google-chrome selenium-webdriver


【解决方案1】:

你可以试试下面的代码

links = [link.get_attribute('href') for link in webdriver.find_elements_by_partial_link_text('F04') if link.get_attribute('href').endswith('.pdf")')]

你也可以试试下面的 XPath

links = webdriver.find_elements_by_xpath('//a[contains(., "F04") and contains(@href, ".pdf")]')

【讨论】:

  • 谢谢,这行得通。请注意,link.get_attribute('href') 实际上以.pdf"); 结尾。问题:为什么link.get_attribute('href') 返回一个字符串?对我来说似乎是奇怪的行为。
【解决方案2】:

Andersson 的方法似乎稍作修正后奏效: if link.get_attribute('href').endswith('.pdf')] 而不是 if link.get_attribute('href').endswith('.pdf")')],即删除")。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-10
    • 2013-12-21
    • 1970-01-01
    • 2013-05-19
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多