首页 > 技术文章 > selenium的使用(十)

sniper-huohuohuo 2018-04-05 15:58 原文

关于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‘一致。

一般情况下上面的这些就可以满足平时的显性等待判断。

 

 

 

谢谢大家的阅读,如有不对的地方希望在评论下面指出来,谢谢。

 

推荐阅读