Как скачать PDF с Selen WebDriver - PullRequest
1 голос
/ 07 марта 2020

Я хотел бы загрузить PDF в Python с помощью Selenium WebDriver. Однако по какой-то причине я не могу выбрать / нажать кнопку загрузки. Это может быть из-за того, что кнопка не фокусируется?

Это кнопка: enter image description here

<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="spinner-third" class="svg-inline--fa fa-spinner-third fa-w-16 fa-icon menubar-h-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M456.433 371.72l-27.79-16.045c-7.192-4.152-10.052-13.136-6.487-20.636 25.82-54.328 23.566-118.602-6.768-171.03-30.265-52.529-84.802-86.621-144.76-91.424C262.35 71.922 256 64.953 256 56.649V24.56c0-9.31 7.916-16.609 17.204-15.96 81.795 5.717 156.412 51.902 197.611 123.408 41.301 71.385 43.99 159.096 8.042 232.792-4.082 8.369-14.361 11.575-22.424 6.92z"></path></svg>

А вот мой текущий код для воспроизведения:

from selenium import webdriver
import time

website = "https://onlinelibrary.wiley.com/doi/epdf/10.1111/jofi.12895"
driver = webdriver.Chrome()
driver.get(website)
driver.set_window_size(1024, 768)
time.sleep(4)

1 Ответ

1 голос
/ 08 марта 2020

Поскольку требуемый элемент находится в пределах <iframe>, поэтому для вызова click() на элементе необходимо:

  • Ввести WebDriverWait для требуемого frame_to_be_available_and_switch_to_it() .
  • Индуцируйте WebDriverWait для нужного element_to_be_clickable().
  • Вы можете использовать любой из следующих Стратегий локатора :

    • Использование CSS_SELECTOR:

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe.rc-reader-frame")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "menu-button.download span"))).click()
      
    • Использование XPATH:

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[@class='rc-reader-frame']")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//menu-button[@class='download']//span[text()='PDF']"))).click()
      
    • Примечание : необходимо добавить следующие операции импорта:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
  • Снимок браузера:

download


Ссылка

Вы можете найти пару соответствующих обсуждений в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...