关于webdriver等待问题
1. time.sleep()
该方法是强制等待,如果未加载完成也会进行下一步。
2.implicitly_wait()
隐性等待,设置一个最大等待时间,如果时间内加载完成,时间未到,也会继续等待,隐性等待可以全局使用,不用在重新设置。
3.显性等待 WebDriverWait(browser,等待时间,查看频率)
查看频率默认为0.5秒。
调用模块:
from selenium.webdirver.support.wait import WebdriverDriverWait
from selenium.webdriver.support import expected_conditions as EC
显性等待在最大时间段内,按照一定的频率查看网页,如果加载完成会进行下一步操作,否则抛出异常。
显性等待:
WebDriverWait()与until()和until_not()结合运用。
关于显性等待,有很多方法,但是在此我只列出几个常用的方法。
<1> EC.presence_of_element_located() 判断是否存在一个符合条件的元素。
<2> EC.presence_of_all_elements_located() 判断是否存在一个以上符合条件的元素,并返回列表。
<3> EC.visibility_of_element_located() 判断是否存在一个 “可见” 元素
<4> EC.visibility_of_all_elements_located() 判断是否存在一个以上的 “可见” 元素
<5> EC.visibility_of() 这个跟<3>功能一样,只不过括号内容不一样。这个括号内可以传入 .find_element()以及.find_element_by_。。。。一系列定位方法。还是举个例子吧, WebDriverWait(browser,13,0.5).until(EC.visibility_of(browser.find_element_by_xpath(......)))
<6> EC.title_is() 判断title是否是括号内的字符串。
<7> EC.title_contains() 判断title是否包含括号内的字符串。
<8> EC.text_to_be_present_in_element((By.XPATH,‘//‘),‘string‘) 判断括号内的string是否和定位的标签内的字符串是否一致。
<9> EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,‘a[id="abc"]‘),‘string‘) 判断被定位的元素的属性的值是否和’string‘一致。
一般情况下上面的这些就可以满足平时的显性等待判断。
谢谢大家的阅读,如有不对的地方希望在评论下面指出来,谢谢。