Как нажать кнопку ввода, когда в Selenium открыто окно «Сохранить как»? - PullRequest
0 голосов
/ 17 октября 2019

Я хочу сохранить этот файл , используя Selenium. Я могу нажать «сохранить как» с помощью следующего кода:

driver = webdriver.Chrome(chrome_options=options, executable_path = chrome_driver_path)
driver.get('https://www.shs-conferences.org/articles/shsconf/pdf/2019/06/shsconf_m3e22019_03006.pdf')

ActionChains(driver).move_to_element(driver.find_element_by_xpath('//*[@id="plugin"]')).key_down(Keys.CONTROL).send_keys('s').key_up(Keys.CONTROL).perform()

Однако я не могу заставить Python нажать кнопку «Сохранить» во всплывающем окне. Я пробовал:

driver.find_elements_by_xpath("//*[contains(text(), 'Save')]").click()

и

ActionChains(driver).send_keys(u'\ue007').perform()

Кто-нибудь знает, как нажать кнопку «Сохранить» внизу?

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

Причина, по которой это не работает для вас, заключается в том, что диалог сохранения, используемый Chrome, не отображается как веб-страница. Это нативный код.

Чтобы обойти это, вы можете использовать модуль selenium.webdriver.chrome.options.Options. Вам нужно будет установить каталог файлов по умолчанию, в противном случае появится приглашение. Вы можете использовать скрипт, подобный следующему; Вы можете найти больше информации здесь . Вы также можете найти информацию о , почему здесь используются экспериментальные варианты

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

options = Options()
options.add_experimental_option("prefs", {
  "download.default_directory": r"C:\Users\xxx\downloads\Test",
  "download.prompt_for_download": False,
  "download.directory_upgrade": True,
  "safebrowsing.enabled": True
})
0 голосов
/ 17 октября 2019

Вы можете использовать модуль клавиатуры в сочетании с селеном

import keyboard, time

keyboard.press(['ctrl', 's'])
time.sleep(1)
keyboard.press('enter')

Это позволит вам сохранить файл.

0 голосов
/ 17 октября 2019

ОБНОВЛЕНИЕ

Хотя, как сказано выше @Glazbee selenium не может получить доступ к диалоговому окну ОС, существует обходной путь с pyautogui. Попробуйте следующее, если вы не хотите устанавливать папку загрузки по умолчанию в вашем chrome_options вашего webdriver:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pyautogui
import time

driver = webdriver.Chrome(chrome_options=options, executable_path = chrome_driver_path)
driver.get('https://www.shs-conferences.org/articles/shsconf/pdf/2019/06/shsconf_m3e22019_03006.pdf')

webdriver.ActionChains(driver).move_to_element(driver.find_element_by_xpath('//*[@id="plugin"]')).key_down(Keys.CONTROL).send_keys('s').key_up(Keys.CONTROL).perform()
time.sleep(1)
pyautogui.press('enter')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...