我在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_*
方法中的多个条件?
答案 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“)')],即删除”)。