簡體   English   中英

Python - 無法使用 selenium chromewebdriver 下載文件 - “失敗 - 下載錯誤”

[英]Python - Can't download file using selenium chromewebdriver - 'Failed - Download error'

我試圖使用硒從谷歌瀏覽器下載文件。 我在下面使用的代碼運行良好。 但不知何故,它不再起作用了。 有任何想法嗎?

import os.path
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select

RAWDATA_URL = 'https://oui.doleta.gov/unemploy/DataDownloads.asp'
options = webdriver.ChromeOptions() 
prefs = {'download.default_directory' : SAVE_PATH, "download.prompt_for_download": False}
options.add_experimental_option('prefs', prefs)

driver = webdriver.Chrome(executable_path = DRIVE_PATH, chrome_options = options)


driver.get(RAWDATA_URL)
time.sleep(5)

下面的 xpath 只是從 HTML 復制,所以應該是正確的

driver.find_element_by_xpath("//*[@id='main']/table[38]/tbody/tr[2]/td[5]/a").click()

我也試過get方法:

driver.get("https://oui.doleta.gov/unemploy/csv/ar9047.csv")

我期待 csv 文件可以成功下載。 但是谷歌瀏覽器只是告訴我“失敗-下載錯誤”。

更新:我簡化了上面的問題。 我的項目實際上有兩個步驟。 首先從一個站點下載數據,然后導航到另一個站點以下載 csv 數據。

import datetime
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC



SUMMARY_URL = "https://oui.doleta.gov/unemploy/reemploy.asp"
RAWDATA_URL = 'https://oui.doleta.gov/unemploy/DataDownloads.asp'
REEMPLOYMENT_QTR = '09/30/2018' 

options = webdriver.ChromeOptions() 
prefs = {'download.default_directory' : SAVE_PATH, "download.prompt_for_download": False}
options.add_experimental_option('prefs', prefs)

driver = webdriver.Chrome(executable_path = DRIVE_PATH, chrome_options = options)

第一步:

driver.get(SUMMARY_URL)
time.sleep(5)

select = Select(driver.find_element_by_id('qtr'))
select.select_by_value(REEMPLOYMENT_QTR)
driver.find_element_by_xpath("//input[@name='submit'][@type='submit']").click()
re_table = driver.find_element_by_xpath("//*[@id='content']/table")

state = []
value = []
for re in re_table.find_elements_by_tag_name('tr'):
    c = 0 
    for ele in re.find_elements_by_tag_name('td'):
        if c == 0:
            state.append(ele.text.encode('utf8'))
            c += 1
        else:
            value.append(ele.text.encode('utf8'))


reemployment = pd.DataFrame({'state' : state, AS_OF_DATE : value})
reemployment = reemployment[['state', AS_OF_DATE]]

第二步(我原來的問題):

driver.execute_script("window.open('');") 
time.sleep(5)
driver.switch_to.window(driver.window_handles[1]) 
time.sleep(5)
driver.get(RAWDATA_URL)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//th[text()='ETA 9047']//following::table[1]//tr/td/a[@title='Data']"))).click()

我的問題是我的默認目錄保存路徑有問題:它是“C:/Users/...”但應該是“C:\\Users\\...”,如下所示

    chrome_options = webdriver.ChromeOptions()
    prefs = {
    'download.default_directory': 'C:\\Users\\<username>\\Documents\\test\\',
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing_for_trusted_sources_enabled": False,
    "safebrowsing.enabled": False
    }
    chrome_options.add_experimental_option('prefs', prefs)

據推測,您正在嘗試使用ETA 9047部分中的文本作為數據調用元素上的click()並實現這一點,您必須為element_to_be_clickable()引入WebDriverWait ,您可以使用以下定位器策略

  • 使用XPATH

     from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("start-maximized") driver = webdriver.Chrome(options=chrome_options, executable_path=r'C:\\Utility\\BrowserDrivers\\chromedriver.exe') driver.get("https://oui.doleta.gov/unemploy/DataDownloads.asp") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//th[text()='ETA 9047']//following::table[1]//tr/td/a[@title='Data']"))).click()
  • 瀏覽器快照:

9047

PS :確保您使用的帶有ChromeDriver / Chrome v76.0 的Selenium v3.141.59

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM