Selenium не загружается с параметрами, переданными в драйвер Chrome - PullRequest
1 голос
/ 26 июня 2019

Я хочу скачать файл, и я могу сделать это с кодом ниже.Когда я передаю параметры драйверу, загрузка не начинается.

from selenium import webdriver
url = "http://wwwapps.tc.gc.ca/Saf-Sec-Sur/2/CCARCS-RIACC/DDZip.aspx"
driver.get(url)
driver.find_element_by_id("btnDownload").click()

Я пытался передать следующие параметры, но загрузка не начинается:

from selenium import webdriver
url = "http://wwwapps.tc.gc.ca/Saf-Sec-Sur/2/CCARCS-RIACC/DDZip.aspx"
options = webdriver.ChromeOptions()
options.add_argument("download.default_directory=H:/")
options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")
with webdriver.Chrome(chrome_options=options) as driver:
    driver.get(url)
    driver.find_element_by_id("btnDownload").click()

Я также пытался:

from selenium import webdriver
url = "http://wwwapps.tc.gc.ca/Saf-Sec-Sur/2/CCARCS-RIACC/DDZip.aspx"
with webdriver.Chrome() as driver:
    prefs = {
    "download.default_directory": down_dir,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True
    }

    options.add_experimental_option('prefs', prefs)
    driver.get(url)
    driver.find_element_by_id("btnDownload").click()

Я хочу скачать файл со скрытым окном браузера.Кроме того, есть ли способ закрыть его сразу после успешной загрузки (используя driver.quit())?

РЕДАКТИРОВАТЬ:

Я удалил дублированные экземпляры драйвера - ошибкачто я сделал во время копирования фрагментов кода.

1 Ответ

0 голосов
/ 26 июня 2019

Вы дважды создаете экземпляр своего веб-драйвера, удаляете / комментируете другую строку:

with webdriver.Chrome(options=options) as driver:
    # driver = webdriver.Chrome(options=options)

Также не уверены в классе Options, я думаю, что вы должны импортировать его с помощью:

from selenium.webdriver.chrome.options import Options

РЕДАКТИРОВАТЬ: да, Chrome не собирается загружать в режиме без головы: SO ответ .

Итак, решение для вас:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

url = "http://wwwapps.tc.gc.ca/Saf-Sec-Sur/2/CCARCS-RIACC/DDZip.aspx"


def enable_download_in_headless_chrome(driver, download_dir):
    # add missing support for chrome "send_command"  to selenium webdriver
    driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
    params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}}
    driver.execute("send_command", params)

options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
enable_download_in_headless_chrome(driver, "H:/")
driver.get(url)
driver.find_element_by_id("btnDownload").click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...