Python-使用Selenium打开新标签页后无法下载文件

时间:2019-08-12 16:19:53

标签: selenium google-chrome download webdriver

我需要使用铬和硒从网站下载xls文件。我需要去多个网站,所以我需要打开新的标签页。但是,当我打开第二个选项卡时,无法下载所需的文件。下面是我的代码的简单版本。我刚刚从一个标签下载了一些文件,然后使用window.open()打开一个新文件的图像:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

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.execute_script("window.open('https://www.fhfa.gov/DataTools/Downloads/Pages/House-Price-Index-Datasets.aspx#mpo');") 
time.sleep(5)
driver.switch_to.window(driver.window_handles[1]) 
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='WebPartWPQ2']/div[1]/table[3]/tbody/tr[2]/td[2]/p/a"))).click()

无需打开新标签,我可以成功下载文件。但是在打开新标签页后,chrome告诉我“失败-下载错误”。我的代码有问题吗?

2 个答案:

答案 0 :(得分:0)

MacOS,Chrome版本76.0.3809.100,ChromeDriver版本75.0.3770.140都以两种方式成功下载。
为了更好地使用下面的来定位下载链接,请找到有关定位器策略here的更多信息

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href*='HPI_PO_summary.xls']"))).click()

更快的方法是使用https://www.fhfa.gov/下载文件,例如:

import requests
import os

file_name = "HPI_PO_summary.xls"
response = requests.get(f'https://www.fhfa.gov/DataTools/Downloads/Documents/HPI/{file_name}')

with open(os.path.join(SAVE_PATH, file_name), 'wb') as f:
    f.write(response.content)

答案 1 :(得分:0)

在这里回答我的问题:

似乎问题出在SAVE_PATH中。最初,我的SAVE_PATH是:

r"C:\Users\hw\Desktop\myfile\"

由于某种原因,如果我在路径的末尾再添加一个斜杠,则它会起作用(基于答案here):

r"C:\Users\hw\Desktop\myfile\\"