文章目录
- 初学selenuim记录
- 1、执行driver = webdriver.Chrome()后很久才打开浏览器
- 2、浏览器多元素定位 $x(‘xpath语法’)
- 3、打开浏览器driver.get("网址")执行了很久才开始定位元素:等待
- (1)driver.set_page_load_timeout(t)
- (2)WebDriverWait()
初学selenuim记录
1、执行driver = webdriver.Chrome()后很久才打开浏览器
尚未解决,一会很快打开一会很慢打开
2、浏览器多元素定位 $x(‘xpath语法’)
console里面调试xpath 定位的语法是 :$x()
在console里面通过 $x(‘xpath语法’) 可以确定 xpath 语法是否写正确,方便报错时排查问题
# //*[@id="leftcolumn"]/a[1]
# //*[@id="leftcolumn"]/a[2]
# //*[@id="leftcolumn"]/a[3]
# console里面调试xpath 定位的语法是 :$x() ;
# 在console里面通过 $x(‘xpath语法’) 可以确定 xpath 语法是否写正确,方便报错时排查问题
# $x('//*[@id="leftcolumn"]/a') (74)
3、打开浏览器driver.get(“网址”)执行了很久才开始定位元素:等待
selenium元素操作等方法是需要等待页面所有元素完全加载完成后才开始执行的,所以在页面未完成加载前,代码会一直等待页面加载不继续执行。
(1)driver.set_page_load_timeout(t)
解决办法参考资料:
【selenium】解决页面加载时间过长问题
解决 selenium 加载网页阻塞的问题
- 设置等待时间:driver.set_page_load_timeout(0.1)
- 超时即抛出异常:try: except TimeoutException:
- 超时后执行Javascript停止页面加载:driver.execute_script(‘window.stop()’)
# 设置WebDriver的页面加载时间(set_page_load_timeout),
# set_page_load_timeout(time) 方法可以设置页面的加载超时时间
# 在页面加载超出设置时间时会报错,Timed out receiving message from renderer: time
driver.set_page_load_timeout(5) # 设置页面加载时间miao
PrintTime.NowTime("控制浏览器,访问页面")
start = time.time()
try:driver.get("https://www.runoob.com/html/html-tutorial.html") # 控制测览器,访问
except TimeoutException:# 超时后执行Javascript停止页面加载PrintTime.NowTime("Time Out")driver.execute_script('window.stop()')
# 显示等待:WebDriverWait()
WebDriverWait(driver, 5, 0.1).until(lambda x: x.find_element_by_id('kw'))
print('the page is loaded')
end = time.time()
# 计算页面加载时间
print(end - start)
# 设置页面加载时间的方式只适用于使用 get() 方式打开网页,如果是通过操作进行跳转的页面不适用
(2)WebDriverWait()
解决办法参考资料:
webdriver中的等待——主要讲解WebDriverWait()
- 显示等待:WebDriverWait()
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔步长,默认为0.5s
ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。
- 与until()或者until_not()方法结合使用
WebDriverWait(driver,10).until(method,message="")
在设置时间(10s)内,等待后面的条件发生。如果超过设置时间未发生,则抛出异常。在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False.
- 匿名函数:lambda
# lambda 形式参数 : 函数表达式
sum_1 = lambda arg1, arg2: arg1 + arg2
# lambda是一个表达式,可以被命名,其中arg1, arg2是形式参数,arg1 + arg2 函数表达式
sum_1(1,2)
# 返回结果 3
等待时间为10秒,每0.5秒检查一次,然后使用匿名函数等待直到找到id为’kw’的元素
# 设置等待
wait = WebDriverWait(driver,10,0.5)
# 使用匿名函数
# lambda x: x2 表示一个接受参数x并返回x2的匿名函数
wait.until(lambda diver:driver.find_element_by_id('kw'))