如何使Python/Selenium等待文件处理,然后单击下载



我正在尝试使用Python/Selenium来自动下载每天更新的文件的过程。到目前为止,我的代码打开了网站,选择我想要的条件(以CSV格式下载文件(,然后单击"启动处理"按钮。单击"开始处理"后,网站设置的方式,该网站将您重定向到带有加载栏的其他页面(表明处理的完成(和"取消请求"按钮,并且大约10秒钟后文件准备就绪,"取消请求"按钮变成"下载我的文件"按钮。随着一年的发展,该文件将逐渐变大,因此处理将从约10秒到几(2-4(分钟。如果花费时间超过5分钟,则该处理将自动超时。我的" #supppped等待文件处理"的尝试是要等到ID" btn_download"("下载我的文件"点击的ID(之前出现,然后才单击"下载我的文件"链接。我认为我编写的下载该文件的代码将起作用,因为同一代码可以开始处理,并且它们都"类型:提交"链接,但是我不确定我是否没有下载的原因是因为"等待"代码无法正常工作,或者是"下载代码"(或两者都(。我尝试使用" delay = x",driver.implicitly_wait(x(和" time.sleep(x(",它们对我不起作用(我不确定我不确定它们(。最终,目标是打开页面,选择CSV标准,开始处理,等待直到处理完成,下载文件,然后将其保存到我的硬盘驱动器中的文件夹中(而不是将其放在下载中(

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
#Opens the website
browser = webdriver.Firefox() 
browser.get("https://mywebsite.com")
#Clicks CSV Option
browser.find_element_by_id("rdo_file").click()
#Starts Processing
browser.find_element_by_id("btnStart").click()
#Supposed to wait for the file to process 
try:
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "btn_download"))
)
#Supposed to click the "Download my File" link
browser.find_element_by_id("btn_download").click()

奖励积分,如果您可以帮助我将文件下载到我的硬盘驱动器中的特定文件中!感谢您的帮助!

编辑以添加错误消息:

File "<stdline>" line 6
^
Syntax Error: invalid syntax

还意识到,在该错误消息之后,Python允许我再次击中Enter来处理确实有效的"下载我的文件"代码。因此,我的问题在于等待代码(需要它等待并自动继续该过程,这样我就不需要返回并点击Enter(。

from selenium.webdriver.support import expected_conditions as EC
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "btn_download"))
    )
except:
    wait = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'btn_download')))
browser.find_element_by_id("btn_download").click()

根据您的观察,问题在于等待代码,并且根据 html ,您已提供了单击按钮要启动下载您可以使用以下任何代码行的文件:

  • CSS_SELECTOR&amp;click()

    WebDriverWait(driver, 300).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#btn_download[name='btn_download'][value='Download My File']")).click()
    
  • CSS_SELECTOR&amp;submit()

    WebDriverWait(driver, 300).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#btn_download[name='btn_download'][value='Download My File']")).submit()
    
  • XPATH&amp;click()

    WebDriverWait(driver, 300).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='btn_download' and @name='btn_download' and @value='Download My File']")).click()
    
  • XPATH&amp;submit()

    WebDriverWait(driver, 300).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='btn_download' and @name='btn_download' and @value='Download My File']")).submit()
    

注意:如您所提到的,自动超时为 5分钟我一直保持最大的等待等于 300秒

相关内容

最新更新