首页 > 解决方案 > Selenium 花费太多时间来下载文件

问题描述

我正在使用我的这部分代码下载一些文件,这些文件是通过单击指定了部分文本的链接来下载的,但即使使用我driver.implicitly_wait(5)的 ,驱动程序也需要 2 分钟以上的时间来检查和下载可用文件。

与下面的代码相同的最佳 pythonic 方式是什么?

重要的是,有时 4 个文件中只有一个或两个可供下载。

driver.find_element_by_xpath('//*[@id="menu"]/li[2]/a').click()
driver.find_element_by_xpath('//*[@id="linkbtconsultar"]/a[1]/span').click()

try:
    driver.find_element_by_partial_link_text('ASD!').click()
except NoSuchElementException:
    return
try:
     driver.find_element_by_partial_link_text('QWE#').click()
except NoSuchElementException:
     return
try:
    driver.find_element_by_partial_link_text('RTY%').click()
except NoSuchElementException:
    return
try:
    driver.find_element_by_partial_link_text('ASD%').click()
except NoSuchElementException:
    return

标签: pythonselenium

解决方案


我会将 4 个定位器合二为一,返回一组元素,然后单击每个定位器循环遍历该集合。

像这样的东西:

driver.find_element_by_xpath('//*[@id="menu"]/li[2]/a').click()
driver.find_element_by_xpath('//*[@id="linkbtconsultar"]/a[1]/span').click()
docs = driver.find_elements_by_xpath('//a[contains(.,'ASD!')] | //a[contains(.,'QWE#')] | //a[contains(.,'RTY%')] | //a[contains(.,'ASD%')]')
for doc in docs:
    doc.click()
    # you probably will need a brief wait here to give the browser time to process each click

此代码将尝试获取所有所需的文档并仅返回存在的文档......但它应该是即时的。


推荐阅读