我正在尝试使用Selenium浏览Coursera的网站,而且我在登录后让驱动程序识别页面已更改时遇到了一些问题。以下是我使用的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("https://www.coursera.org/?authMode=login")
# Target the user name input field
try:
user = WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".c-user-modal-controls > div:first-child"))
)
except:
print "[-] No joy..."
user.send_keys("email@gmail.com")
# Target the password input field
user.send_keys(Keys.TAB)
user.send_keys("password")
# submit the login form
login_button = driver.find_element_by_css_selector(".rc-LoginForm > form > button")
login_button.click()
# Choose Intro to Data Science with Python course
course = driver.find_element_by_css_selector(".rc-EnrollmentsList")
course.click()
这不起作用,告诉我无法找到该元素。我尝试了很多解决方案,包括检查文档就绪状态等于"完成",切换到新窗口,检查是否存在元素,以及检查标题是否已更改。似乎没有什么工作,如果我打印页面源,它实际上是来自初始窗口加载的页面源,这就是为什么我认为上述方法都不起作用。
如何告诉Selenium我已切换到新页面并且需要更新其信息来源?
注意:我知道Coursera对网页抓取有非常严格的政策,所有材料仅用于非商业用途。执行此任务的唯一目的是自动下载我已注册的课程的视频,以便稍后查看。
答案 0 :(得分:0)
这似乎纯粹是一个等待问题。您必须在脚本中添加一些等待语句。尽管网站移至下一页,但脚本仍停留在前一页上,这也是我所经历的。只需添加一个 “ Thread.sleep(2000) 在转到下一页之前。如果可行,则添加标准的wait语句。增加秒数以便找到问题。请注意,执行同一段代码的次数越多,加载所需的时间就会有所不同(大多数情况下会增加!)
因此,请尝试执行睡眠声明并检查您是否在新页面上,然后可以对其进行标准化。编码愉快。