Варианты и возможности Selenium Chrome - PullRequest
0 голосов
/ 30 января 2019

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

chromedriver = 'PATH/TO/chromedriver'

download_fp = './testPrismaDownload/'
prefs = {
    "download.prompt_for_download" : False,
    "download.default_directory": download_fp
}

options = webdriver.ChromeOptions()
options.binary_location = '/usr/bin/google-chrome-stable'
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-setuid-sandbox')
options.add_experimental_option('prefs', prefs)

# i've tried various combinations of `options`, `chrome_options` (deprecated) and `desired_capabilities`
browser = webdriver.Chrome(options=options, desired_capabilities=options.to_capabilities(), executable_path=chromedriver)

ни одна из моих указанных опций не появляется в browser.capabilities или browser.desired_capabilities.Например, ключ для chromeOptions в возможностях: goog:chromeOptions': {'debuggerAddress': 'localhost:42911'}.

Когда я выполняю download_button.click(), команда успешно выполняется, но ничего не загружается.Я также попробовал его на своем Mac-ноутбуке без опции --headless, и когда я нажимаю кнопку загрузки, браузер открывает диалоговое окно загрузки, запрашивающее подтверждение загрузки.

Любая помощь / опыт будет принята с благодарностью.

Python 3.6.6 :: Anaconda, Inc.

Селен '3.141.0'

Linux 9725a3ce7b7e 4.9.125-linuxkit # 1 SMP Пт 7 сентября 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

1 Ответ

0 голосов
/ 30 января 2019

Возникла проблема: https://github.com/SeleniumHQ/selenium/issues/5722

Это просто.Вызовите эту функцию активации после окна переключателя для вашего драйвера:

 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}}
    command_result = driver.execute("send_command", params)

expected_download = 'ur/download/path'
opt = Options()
opt.add_experimental_option("prefs", { \
    'download.default_directory': expected_download,
     'download.prompt_for_download': False,
     'download.directory_upgrade': True,
  })
opt.add_argument('--headless')
opt.add_argument('--window-size=1920,1080');

login_page = "https://www.google.com"
driver = webdriver.Chrome(options=opt)
driver.implicitly_wait(5)
driver.get(login_page)
driver.maximize_window()

#On below click you will be in new tab
scoresheet_tab = driver.find_element_by_xpath("//*[@class='sideNav-item is--scoresheet']").click()

instances = driver.window_handles
driver.switch_to.window(instances[1]) # this is the new browser
#this below function below does all the trick
enable_download_in_headless_chrome(driver, expected_download)
...