python - 如何使用 Selenium 验证表格元素并单击其他元素
问题描述
我正在尝试创建一个进入网站并下载包含房地产基金资产负债表的 XML 文件的刮板。
使用下面的代码,我输入文档编号为 07000400000146(在 URL 末尾)的特定基金的网站,使用网站上的搜索栏过滤文档,然后使用 XPath 单击下载表格中的第一个文档。
driver.get('https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=07000400000146')
driver.find_element_by_css_selector(f'input[type="search"]').click()
driver.find_element_by_css_selector(f'input[type="search"]').send_keys('informe mensal')
time.sleep(1)
driver.find_element_by_xpath('//*[@id="tblDocumentosEnviados"]/tbody/tr[1]/td[10]/div/a[2]/i').click()
如何在“参考数据”列中创建布尔表达式以发现行是 03/2020 或 02/2020 还是 01/2020,然后下载每个相应日期的所有可用文件?
解决方案
您可以尝试这样的列表datelist=[ '03/2020','02/2020','01/2020']
,并使用下面的 xpath 选项检查网页上可用的日期。如果可用的日期将单击并下载,否则将显示没有可用的日期。使用try..except
块。忽略sleep()
使用WebDriverWait
()
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
driver=webdriver.Chrome()
driver.get('https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=07000400000146')
driver.find_element_by_css_selector('input[type="search"]').click()
driver.find_element_by_css_selector('input[type="search"]').send_keys('informe mensal')
datelist=[ '03/2020','02/2020','01/2020']
for dates in datelist:
try:
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,"//table[@id='tblDocumentosEnviados']//td[text()='"+ dates + "']/following-sibling::td[5]//a[@title='Download do Documento']"))).click()
print('file downloaded with dates available ' + dates)
except:
print("No such dates available " + dates)
这将像这样在控制台上打印。
No such dates available 03/2020
file downloaded with dates available 02/2020
file downloaded with dates available 01/2020
更新了带有状态的代码Ativo
driver.get('https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=07000400000146')
driver.find_element_by_css_selector('input[type="search"]').click()
driver.find_element_by_css_selector('input[type="search"]').send_keys('informe mensal')
datelist=[ '03/2020','02/2020','01/2020']
for dates in datelist:
try:
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,"//table[@id='tblDocumentosEnviados']//td[text()='"+ dates +"']/following-sibling::td[.//span[text()='Ativo']]/following-sibling::td//a[@title='Download do Documento']"))).click()
print('file downloaded with dates available ' + dates)
except:
print("No such dates available " + dates)
推荐阅读
- swift - 如何在 NSTextField 中调整垂直单行字符串?
- node.js - 在猫鼬的每个查找查询中添加(注入)一个条件
- python - Pygame 中的用户定义键
- excel - SUM公式中的CONCATENATE函数
- spring-boot - 带有 Artemis 2.6.3 多播(主题)的 Spring WebSocketMessageBrokerConfigurer 不起作用
- r - 在 deSolve 包中产生的 NaN
- ios - Container/XiB Swift 中的音频播放器
- utf-8 - 由于 inputenc 错误,LyX 不编译文件
- wordpress - Wordpress 重定向到未知链接
- c# - Google Cloud Storage:删除存储桶的内容