虽然看着代码先执行的click()翻页,但是下面一行代码执行得很快,在实际翻页前就获得当前页数据(假设页面之间数据结构相同),进而造成翻页的click()没有到达预期效果。
解决办法有两种:一是采用强制等待,time.sleep(3)等待3秒,但是有些时候可能不需要3秒那么多,有时3秒又可能不够,怎么优化呢?
第二种办法就要用到 WebDriverWait方法了,至于怎么引用相关库此处略,重点介绍一下它的使用结构
WebDriverWait(browser, 10)通常和until一起使用,使用中又会用到EC,EC的引用是from selenium.webdriver.support import expected_conditions as EC。顾名思义就是期望的条件,当然就有很多可选条件了,例如.text_to_be_present_in_element意思是元素的text中有某个字符串(这种类型的条件作为等待加载网页完成继续下一步程序的条件)。由此你必须告诉函数两个参数:你指定的元素是什么,那个字符串又是什么。其中第一个参数以元组方式提供,形式为(定位的方法,定位的具体表达式)。
综上,一个完整的想达到显示等待的表达式为
WebDriverWait(browser, 10).until(EC.text_to_be_present_in_element((By.XPATH,'... / table / tbody / tr[1] / td[1]'),str))
注:browser是webdriver的一个实例名字了,10表示最多等10秒否则报错,By.XPATH只是可选许多定位方法的一种,可以网搜其他定位方法;,’… / table / tbody / tr[1] / td[1]'是确定了定位方法后的具体定位路径,str是期望加载出的那个字符串。