[英]How can I make Python/Selenium wait for file to process then click download
我正在嘗試使用Python / Selenium來自動化下載每天更新的文件的過程。 到目前為止,我的代碼打開了網站,選擇了我想要的條件(下載CSV格式的文件),然后單擊“開始處理”按鈕。 單擊“開始處理”后,網站的設置方式將通過帶有加載欄(指示處理完成)和“取消請求”按鈕的網站將您重定向到其他頁面,大約10秒鍾后文件已准備就緒,“取消請求”按鈕變為“下載我的文件”按鈕。 隨着年份的延長,文件將逐漸變大,因此處理時間將從約10秒縮短至幾(2-4)分鍾。 如果時間超過5分鍾,處理將自動超時。 我的“#應該等待文件處理”嘗試是要等到ID“ btn_download”(單擊“ Download my File”的ID)出現后再單擊“ Download my File”鏈接。 我認為我編寫的用於下載文件的代碼將起作用,因為該代碼可以開始處理,並且它們都是“類型:提交”鏈接,但是我不確定是否無法下載的原因是因為“等待”代碼無法正常工作,或者它是否是“下載代碼”(或兩者)。 我嘗試使用“ 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
和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
和CSS_SELECTOR
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
和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
和XPATH
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秒
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.