Скачать с питоном селен - PullRequest
0 голосов
/ 02 марта 2019

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

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

chrome_options = Options()

chrome_options.add_argument('--dns-prefetch-disable')
chrome_options.add_experimental_option("prefs", {
  "download.default_directory": r'path_here',
  "download.prompt_for_download": False,
  "download.directory_upgrade": True,
  "safebrowsing.enabled": True
})
driver = webdriver.Chrome("./chromedriver", options=chrome_options)

website = "https://www.chess.com/ccc"
driver.get(website)  # loads the page
# This closes a sub-window that opens automatically
element = driver.find_element_by_class_name("form-button-component")
element.click()

driver.find_element_by_class_name("icon-download").click()
download = driver.find_element_by_class_name('download-pgn')
# Click to download
download.find_element_by_class_name("btn").click()

Это должно работать, но не загружает файл, как я ожидал.Я добавляю скриншот для полноты:

description

Кнопка Скачать игру (PGN), текст которой получается по print(download.find_element_by_class_name("btn").text)

1 Ответ

0 голосов
/ 02 марта 2019

На веб-сайте я нажимаю кнопку, которая открывает небольшое подокно

Здесь вы упомянули, что открываете новое подокно, в котором нужно нажать накнопка для скачивания.Но вы не переключаетесь на это окно.Следовательно, невозможно найти этот элемент.

Используйте driver.window_handles, чтобы получить указатель на открытое окно и переключитесь на это окно, используя driver.switch_to_window(), затем попробуйте нажать кнопку для загрузки.

ВыВы можете увидеть, как обрабатывать несколько окон в Python Selen в этом стеке потока ссылка .

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

Так что, похоже, были некоторые проблемы в вашемкод.Как и локатор для кнопок загрузки рядом с шахматной доской и одна после этого были неправильными.Я исправил локатор с помощью правильного xpath, а также внес небольшие изменения в chrome_options.Вам просто нужно изменить download.defualt_directory на путь в вашей машине, и следующий код будет работать:

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

chrome_options = Options()

chrome_options.add_experimental_option("prefs", {
  "download.default_directory": r"C:\Users\Thanthu Nair\Downloads\Test",
  "download.prompt_for_download": False,
  "download.directory_upgrade": True,
  "safebrowsing.enabled": True
})
driver = webdriver.Chrome("./chromedriver", options=chrome_options)

website = "https://www.chess.com/ccc"
driver.get(website)  # loads the page
driver.maximize_window()

# This closes a sub-window that opens automatically
element = driver.find_element_by_class_name("form-button-component")
element.click()

download = driver.find_element_by_xpath("//i[@title='Download']")
download.click()

# Click to download
download.find_element_by_xpath("//button[normalize-space()='Download Game (PGN)']").click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...