sleep 强制睡眠不够平滑
经过资料查找,选择了隐式等待来替代,时间上更平滑快速。
隐式等待也有好多种,我最终选择了 WebDriverWait
这个需要与until_not或者until 配合使用
有几个小坑需要注意
wait2.until(EC.presence_of_element_located((By.XPATH,'.//tbody/tr/td[3]')),message="")
#等待查找条件 某个元素出现
此处注意,如果省略message=“”,则By.ID外面是三层() ,这个被坑一次。
xpath作为条件的话,xpath末尾不得是text() ,必须是element对象,也被坑一次。
上代码。
from selenium.webdriver.common.by import By
#引入WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
#引入expected_conditions类,并重命名为EC
from selenium.webdriver.support import expected_conditions as EC
#隐式等待
wait2 = WebDriverWait(cb, 5)#设置一个隐式等待 5秒超时
wait2.until(EC.presence_of_element_located((By.XPATH,'.//tbody/tr/td[3]')),message="")#等待查找条件 某个元素出现
# 此处注意,如果省略message=“”,则By.ID外面是三层() , xpath不得是text() 必须是element对象
#wait2.until_not()#等待查找条件 某个元素消失
htmlobj=etree.HTML(cb.page_source)
# xpath
zt_num=htmlobj.xpath('.//tbody/tr/td[3]/text()')