selenium超全教程(4)-持续更新中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium超全教程(4)-持续更新中相关的知识,希望对你有一定的参考价值。
参考技术A 单选比较好操作,先定位需要单选的某个元素,然后点击一下即可。多选好像也比较容易,依次定位需要选择的元素,点击即可。
下拉框的操作相对复杂一些,需要用到Select模块。
先导入该类
在select模块中有以下定位方法
测试页面
然后,再演示下拉框的不同选择的方式
Selenium打开一个页面之后,默认是在父页面进行操作,此时如果这个页面还有子页面,想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候switch_to.frame()就来了。如果想回到父页面,用switch_to.parent_frame()即可。
既然是模拟浏览器操作,自然也就需要能模拟鼠标的一些操作了,这里需要导入ActionChains 类。
左键
这个其实就是页面交互操作中的点击click()操作。
右键
context_click()
在上述操作中
双击
double_click()
drag_and_drop(source,target)拖拽操作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。
selenium中的Keys()类提供了大部分的键盘操作方法,通过send_keys()方法来模拟键盘上的按键。
引入Keys类
常见的键盘操作
send_keys(Keys.BACK_SPACE):删除键(BackSpace)
send_keys(Keys.SPACE):空格键(Space)
send_keys(Keys.TAB):制表键(TAB)
send_keys(Keys.ESCAPE):回退键(ESCAPE)
send_keys(Keys.ENTER):回车键(ENTER)
send_keys(Keys.CONTRL,'a'):全选(Ctrl+A)
send_keys(Keys.CONTRL,'c'):复制(Ctrl+C)
send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X)
send_keys(Keys.CONTRL,'v'):粘贴(Ctrl+V)
send_keys(Keys.F1):键盘F1
send_keys(Keys.F12):键盘F12
实例操作演示:
定位需要操作的元素,然后操作即可!
如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在get方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。
等待有三种方式:强制等待、隐式等待和显式等待
1.强制等待
直接time.sleep(n)强制等待n秒,在执行get方法之后执行。
2.隐式等待
implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。
3. 显式等待
设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。
WebDriverWait的参数说明:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: 浏览器驱动
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 每次检测的间隔时间,默认是0.5秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
until(method,message='')
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常
until_not(method,message='')
until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。
其他等待条件
还有一些操作,比如下拉进度条,模拟javascript,使用execute_script方法来实现。
在selenium使用过程中,还可以很方便对Cookie进行获取、添加与删除等操作。
输出:
selenium总结(持续更新)
1.怎么 判断元素是否存在?
如果这个元素不存在, 就会抛出NoSuchElementException,可以通过使用try catch,如果catch到NoSuchElementException 然后返回false
也可通过定义函数的方法来判断元素是否存在
1 def is_element_exist(css): 2 3 element = driver.find_element_by_css_selector(css_selector=css) 4 if len(element) == 0: 5 print "元素未找到: %s" % element 6 return False 7 elif len(element) == 1: 8 return True 9 else: 10 print "找到%s个元素: %s" %(len(element), css) 11 return False
2.如何判断元素是否出现?
判断元素是否出现,存在两种情况,一种是该元素本来就没有;另外一种是有该元素,但状态为hidden
可以通过先判断是否存在,如果不存在返回false;如果存在再去判断是否displayed
if 元素不存在: return False else: if 元素隐藏: 通过执行js语句去除hidden属性 else: 执行定位语句
3.元素下拉框的选择
有以下两种情况:、
(1)select标签组成的下拉选项,直接可以通过相应的API定位
(2)下拉菜单是通过JS实现的,此时需要控制鼠标的行为,比如clickandhold后然后再定位目标元素
4.selenium有几种定位方法
记住“一二三”,即:
一:by_id,此方法最为快捷
二:by_link, by_partial_link
三:by_name, by_class_name, by_tag_name
当然还有css_selector, xpath,这两种定位的效率更高
后期脚本优化时,可以采用js语句替换这些定位方法,此时不仅效率高,而且有利于出现问题时进行调试
5.处理动态变化的元素
(1)通过相对位置,找到不变化的元素
(2)find_elements遍历
6.脚本的效率优化
(1)用js语句替换定位语句
(2)尽量少用sleep, implicitywait,用显示的webdriverwait等待元素
以上是关于selenium超全教程(4)-持续更新中的主要内容,如果未能解决你的问题,请参考以下文章