首先要读懂失败的原因:
- InvalidSelectorException 错误的定位表达式
- Invalid...错误,大概率是脚本错误
- NoSuch... 不存在
- ...Not...无法操作
- ...Intercepted...操作出现意外
错误:找出错误原因,改正错误即可
不存在:
- 是否曾经存在
- 是否未来存在 - 此时不存在,未来才会有
有两种解决方法:1.休眠 - 使用编程语言提供的特性
* input() 人工决定结束时间
* sleep() 定时结束
2.等待 - 使用selenium提供的特性
- 隐式等待:
driver.implicitly_wait(30)
- 显式等待:
WebDriverWait(driver,30).until(lambda x:driver.find_element(By.id,"std"))
- 实例化对象
- 调用until方法
- 传递等待函数
- 等待函数必须返回布尔值
此处使用lambda匿名函数就是因为其不需要命名且必有返回值
休眠和等待的最大差异:
等待过程中会保持和外界的联系,如果等待的对象提前到达,name等待提前结束