我不知道这个问题是否还有意义-我对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
这些信息足以回答我的问题吗?谢谢您的帮助!
在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单击::
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