首页 > 解决方案 > Selenium Webdriver 在 xblock 中找不到元素

问题描述

我不知道这个问题是否有意义——我对 Python 和 Selenium 以及一般的编码都很陌生。

故事是我正在尝试自动化将 edX 课程网页保存为 HTML 的过程。我正在使用最新的 iPython 和 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

这些信息是否足以回答我的问题?谢谢您的帮助!

标签: pythonhtmlselenium

解决方案


试试下面的 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

推荐阅读