Selenium Firefox 在下载文件后卡住

问题描述 投票:0回答:2

我正在使用 python selenium(最新版本)以及 geckodriver 0.31.0 和 Firefox 103 来登录网站并下载文件,但下载文件后,浏览器卡住并且永远不会调用

browser.quit()

这是相关代码:

s = Service(DRIVER_PATH)

firefox_options = Options()
firefox_options.set_preference("browser.download.folderList", 2) # to not use the default directory for downloading the file
firefox_options.set_preference("browser.download.manager.showWhenStarting", False) # turns off the showing of download progress
firefox_options.set_preference("browser.download.dir", "/home/<myuser>/")
firefox_options.set_preference("browser.download.directory_upgrade", True)
firefox_options.set_preference("browser.download.prompt_for_download", False)
firefox_options.set_preference("browser.download.manager.showWhenStarting", False)
firefox_options.set_preference("browser.download.manager.alertOnEXEOpen", False)
firefox_options.set_preference("browser.download.manager.focusWhenStarting", False)
firefox_options.set_preference("browser.helperApps.alwaysAsk.force", False)
firefox_options.set_preference("browser.download.manager.alertOnEXEOpen", False)
firefox_options.set_preference("browser.download.manager.closeWhenDone", True)
firefox_options.set_preference("browser.download.manager.showAlertOnComplete", False)
firefox_options.set_preference("browser.download.manager.useWindow", False)
firefox_options.set_preference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", False)
firefox_options.set_preference("pdfjs.disabled", True)

firefox_options.add_argument("--disable-infobars")
firefox_options.add_argument("--disable-extensions")
firefox_options.set_preference("network.proxy.socks_remote_dns", True)

browser = webdriver.Firefox(service=s, options=firefox_options)

browser.get(URL)

browser.find_element(By.NAME, "login").send_keys(USER)
browser.find_element(By.NAME, "password").send_keys(PASSWORD)
browser.find_element(By.CLASS_NAME, CLASS).click()

# download file
browser.get(URL + "feed.rss")

time.sleep(3)

browser.quit()

我知道我可以通过传递 selenium cookie 使用 python

requests
下载文件,但我需要使用 Selenium 下载文件。

python-3.x selenium geckodriver
2个回答
3
投票

Firefox 102.3 显示带有此配置文件的下载窗口(至少在 java 中)。我需要添加以下配置行:

“browser.download.alwaysOpenPanel”= false

我不确定这是否对 python 有帮助或者这是否是问题所在。在 selenium-java 中,如果有弹出窗口(“显示所有下载”),我会失去某些代码的焦点。


0
投票

我遇到了同样的问题,我最终使用的解决方案是Wget。这里有一个 Java 详细解决方案的链接。 Python 的简化类似物是:

import subprocess
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()

try:
    driver.get('') #the site you want to download something from
    #let's say you want to download a pdf from a page
    src = driver.find_element(By.ID, 'pdf_id').get_attribute('src') #find the element you need
    wget_dir = r'....\wget.exe' #the location of wget.exe
    download_dir = r'....' #the folder you want to download the file in
    wget_command = rf'cmd /c {wget_dir} -P  {download_dir} --no-check-certificate ' + src
    download = subprocess.run(wget_command) #download file 
except Exception as ex:
    print(ex)
finally:
    driver.close()
    driver.quit()
© www.soinside.com 2019 - 2024. All rights reserved.