【发布时间】:2018-03-29 21:39:14
【问题描述】:
我正在尝试使用 Python/Selenium 来自动化下载每天更新的文件的过程。到目前为止,我的代码打开了网站,选择了我想要的条件(以 CSV 格式下载文件),然后单击“开始处理”按钮。 网站的设置方式,点击“开始处理”后,网站会将您重定向到带有加载栏(表示处理完成)和“取消请求”按钮的不同页面,大约 10 秒后文件已准备就绪,“取消请求”按钮变为“下载我的文件”按钮。随着时间的推移,文件将逐渐变大,因此处理时间将从约 10 秒缩短到几 (2-4) 分钟。如果处理时间超过 5 分钟,处理将自动超时。 我的“#Supposed to wait for the file to process”尝试是为了等到 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)。
【问题讨论】:
-
你到底卡在哪里了?可以分享一下相关的HTML吗?
-
经过仔细审查后,我意识到该程序卡住了我的“#supposed to wait for the file to process”代码,给我一个错误,但仍然允许我再次按 Enter 以进行“下载我的文件”代码。 “下载我的文件”链接的相关 HTML 是
-
是的,查看页面的 html 会有所帮助。特别是那个从“取消”变为“下载我的文件”的按钮。我想知道这是否是导致您的问题的原因。
标签: python selenium firefox automation wait