Selenium Webdriver не найдет элемент в xblock - PullRequest
0 голосов
/ 16 апреля 2020

Я не знаю, имеет ли этот вопрос смысл - я очень плохо знаком с Python и с Selenium и кодированием в целом.

История в том, что я пытаюсь автоматизировать процесс сохранения Веб-страницы курса edX как HTML. Я использую последнюю версию I Python и Webdriver. Это то, что я сделал до сих пор:

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r'/Users/Khoa_Ngo\bin\chromedriver\chromedriver.exe')

driver.get('https://courses.edx.org/login')

#logging in
driver.find_element_by_id('login-email').send_keys('EMAIL')
driver.find_element_by_id('login-password').send_keys('PASSWORD')
driver.find_element_by_xpath('//*[@type="submit"]').click()

#choosing course
driver.find_element_by_xpath('//*[@href="/courses/course-v1:Microsoft+DEV262x+1T2020a/course/"]').click()

Далее я хочу сохранить веб-страницу как HTML, сохранить ее где-нибудь и затем нажать «Далее», чтобы перейти к следующей Модуль курса и повторить. Но я не могу найти кнопку. Вот что я попробовал:

driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[2]/div[1]/section[1]/main/div/div/div[1]/button[2]').click()
driver.find_element_by_css_selector('#sequence_adf942ea-fcee-289c-a1f8-3c557ee5fb15 > div.sequence-nav > button.sequence-nav-button.button-next')

Я не думаю, что этот элемент находится в iframe. Однако это что-то вроде «xblock». Я не уверен, как это повлияет на выбор.

Это веб-страница, которую я сохранил: https://drive.google.com/drive/folders/1Zr6sGO0j-H-Tze_lBgkLnQXuQA0pxsWr?usp=sharing

Достаточно ли этой информации, чтобы ответить на мой вопрос? Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 16 апреля 2020

Попробуйте ниже xpath:

 wait = WebDriverWait(driver, 10)
 wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@class='sequence-nav-button button-next'][contains(.,'Next')]"))).click()

или

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@class='sequence-nav-button-label'][contains(.,'Next')]")))

Вы также можете попробовать javascript click ::

wait = WebDriverWait(driver, 10)
nextbutton= wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@class='sequence-nav-button-label'][contains(.,'Next')]")))

driver.execute_script("arguments[0].click();", nextbutton)

Примечание: пожалуйста, добавьте ниже импорта в ваше решение

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...