硒-通过链接文本查找元素

时间:2018-10-26 10:58:59

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

我在Chrome上使用selenium webdriver; Windows 10上的python 3。 我想从数据库中抓取一些报告。我使用公司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_*方法中的多个条件?

2 个答案:

答案 0 :(得分: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")]')

答案 1 :(得分:0)

安德森(Andersson)的方法似乎可以稍作修正: if link.get_attribute('href')。endswith('。pdf')],而不是if link.get_attribute('href')。endswith('。pdf“)')],即删除”)。