Selenium 笔记

1、 截屏:get_screenshot_as_file(“C:\b1.jpg”)

2、 退出:(1).close----关闭当前窗口

 (2).quit()-----用于结束进程,关闭所有的窗口

一、八大元素定位

3、查看页面元素(八中元素熟悉的元素定位,经常会用到)

1)、id定位:find_element_by_id() 

2)、name定位:find_element_by_name() 

3)、class定位:find_element_by_class_name() 

4)、tag定位:find_element_by_tag_name() 

5)、link定位:find_element_by_link_text()  

6)、partial_lick定位:find_element_by_partial_link_text()  局部链接lick元素

7)、xpath定位:find_element_by_xpath   xpath为路径语言,跟上面的定位原理不太一样

8) 、css定位:find_element_by_css_selector 

4、这八种是复数形式

1)id复数定位:find_element_by-id(self,id)  

2)name复数定位:find_element_by_name(self,name)

3)class复数定位:find_element_by_class_name(self,name)

4)tag复数定位:find_element_by_tag_name(self,name)

5)lick复数定位:find_element_by_link_text(self,text)

6)partial_lick复数定位:find_element_by_partial_lick_text(self,link_text)

7)xpath复数定位:find_element_by_xpath(self,xpath)

8)css复数定位:

这两种参数滑方法,对上面8中的总结

1、 find_element(self,by=’id’,value=None)

2、 find_element(self,by=’id’,value=None)

发送文字”python”:send_keys(‘python’)

二、submit()提交订单表单

如:driver_.find_element_by_id(“kw”).submit() 

三、键盘操作

2、模拟键盘的操作需要先导入键盘模块:from selenium.webdriver.common.keys import Keys

3、模拟enter键:send_keys(Keys.ENTER);   其他复制粘贴类似。

如:复制Ctrl+C:send_keys(Keys.CONTROL,’c’)  

四、鼠标悬停事件

鼠标事件需要先导入模块:

from selenium.webdriver.common.action_chains import ActionChains

perform()执行所有ActionChians中的行为

move_to_element() 鼠标悬停

除了常用的鼠标悬停事件,还有

右键:context_click()

双击:double_click()

五、多窗口、句柄(handle)

获取当前页面的句柄:driver.current_window_handle

获取所有的窗口的句柄:window_handles

方法1:判断句柄,不等于当前首页就切换

方法2:获取list里面第二个直接切换

切换窗口:driver.switch_to.window(h)

六、定位一组元素find_elements

Webdriver提供了定位一组元素的方法,跟前面八种定位其实一样,只是前面是单数,这里是复数形式:find_elements

七、随机函数

1、搜索结果有10条,从10条中随机取一个就ok了

2、先导入随机函数:import random

3、设置随机值范围为0~9:a=random.randint(0,9)

八、iframe

Frame 与iframe两者可以实现的功能基本相同,不过iframe比Frame居于更多的灵活型。Frame是整个页面的框架,iframe是内嵌的页面元素。也可以说是内嵌的框架。

Iframe标记又叫发动帧标记,可以用它将一个HTML文档嵌入的<iframe></iframe>所包含的内容与整个页面是一个整体,而<Frame></Frame>所包含的内容时一个独立的个体,时可以独立显示的,另外,应用iframe还可以在同一个页面中多次显示同一内容,而不必重复这段内容的代码。简单点如下:

< Frame >

<iframe>

</iframe>

</ Frame >

九、切换iframe

1、由于登陆按钮时在iframe上,所以第一步需要把定位器切换到iframe上

2、用switch_to_frame方法切换,此处有id属性,可以直接用id定位切换

3、 如果iframe没有id(使用其他八大元素定位同样适用---如上图为tag先定位)

4、 释放iiframe

5、 1、iframe上操作后,想重新回到主页面上操作元素,

使用switch_to_default_context()返回到主页面

6、 确认iframe是否在iframe上的方法

(1)      定位到元素后,切换到firepath界面

(2)      看firebug工具左上角,如果显示Top Window说明没有iframe

(3)      如果显示iframe#xxx这样,说明iframe上,#后面就是他的id

7、 switch_to_frame上的横线

python的脚本上面划奕横线,是说这个语法已经过时了(也可以继续用)。

8、 帮助文档使用

(1)      查看更多的api用法,可以查看官网帮助文档,也可以通过一下方式在本地查看:

Dos窗口输入:python -m pydoc -p4567,如下图,待 server启动后。

然后再浏览器打开:http://localhost:4567/

代码如下:

#coding:utf-8

From selenium import webdriver

Driver=webdriver.Firefox() 

Driver.get(“http://mail.163.com/”) 

Driver.implicitly_wait(30) 

#切换iframe

#iframe=driver.find_element_by_tag_name(“iframe”)

#driver.switch_to_frame(iframe)

#driver.switch_to_frame(“x-URS-iframe”)

Driver.switch_to.frame(“x-URS-iframe”)

Driver.find_element_by_name(“email”).send_keys(“123”)

Driver.find_element_by_name(“password”).send_keys(“456”)

#释放iframe,重新回到主页面上

Driver.switch_to.default_content()

九、select(选项)

1、定位select里的选项有多种方式,(1)二次定位

Select模块(index)

1、 导入select方法:

From selenium.webdriver.suport.select import Select

2、 然后通过select选项的索引来定位选择对应选项(从0开始计数),如选择第三个选项:select_by_index(2)

3、 通过选项的value值来定位。每个选项都有相应的value值,如

3、Select定位(text)

4、select模块的其他方法

Select_by_index():通过索引定位

Select_by_value():通过value值定位

Select_by_visible_text():通过文本值定位

Deselect_all():取消所有选项

Deselect_by_index():取消对index值

Deselect_by_value()::取消对应value值

Deselect_by_visible_text():取消对用文本选项

Frist_select_option():返回第一个选项

All_selected_option():返回所有的的选项

十、alert操作

1、先用switch_to_aleert()方法切换到alert弹出框上

2、用text方法获取弹出文本信息

3、accept()点击确认按钮

4、dismiss()相当于点右上角x,取消弹出框(url的路径,直接复制浏览器打开的路径)

Select遇到的坎

(1)      在操作百度设置里面,点击“保存设置”按钮,alert弹出框没有弹出来。

(2)      原因:经过后面发现,在点击“保存设置”按钮时,由于前面select操作后,失去了焦点

(3)      解决:在slect操作后,做个click()点击操作

十一、单选框和复选框(radiobox、checkbox)

注意:单选框是圆的;复选框是方的

下为单选:

全选:定位同一组元素,从上面源码可以看出,复选框的type=checkbox,,0这里可以用xpath语法:.//*[@type=’checkbox’]

 

注意:find_elements是不能直接点击的,他是复数,所以只能先取得所有的checkbox对象,然后使用for循环去一个个点击操作

判断是否选中:is_selected()

 

十二、启动配置文件

1、 由于文件路径存在字符:,反斜杠在代码里是转义字符

2、 遇到转义字符,为了不让转义,两种处理方式:

第一种:(前面再加一个反斜杠)

第二种:r“”(字符串前面佳r,使用字符串原型)

十三、文件上传(send_keys)

       文件上传是web页面上常见的一个功能,哟个脚本区实现上传不是那么简单。

       一般分为两个场景:

A、一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决;

B、另一种是非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方库

1、识别上传按钮

一般有些可以直接firebug查看按钮属性,像图片这种上传有个很明显的标识,它是input标签,并且type属性的值为file

只要这两个标识,即可直接用send_keys()方法上传文件

十四、cookie相关操作

1、 获取cookies:get_cookies()

先启动浏览器,获取cookies,打印出来发现是空的

打开被测系统首页,冲洗获取cookies,打印出来具有值了

2、 获取指定【name的cookie:driver.get_cookie(name)

①    获取cookies发现有多个cookies的name值就可以了,比如的:.CNBlogsCookie

3、 清除指cookies:delete_cookies

4、 Delete_all_cookies():清除所有的cookies

5、 And_cookies(cookies_dict):添加cookies的值

6、 (第五个方法可以用于绕过验证码是,下面详细学习)

验证码这种问题比较头痛的,对于验证码的处理,不要去向破解方法,这个验证码安全级别不高,那需要提高级别了

另外对于验证码,要么是让开发再测试环境弄个万能的验证码,如:12345,要么就是尽量绕过去

十五、fiddler抓包

1、 前面是,登陆后生成一个已登陆状态的cookies,那么只有需要直接把这个添加cookies里面即可

2、 这是可以使用手动登陆一次,然后抓取这个cookie,这里就需要抓包工具fiddler

3、 打开博客园登陆界面,手动输入账号和密码(不要点登陆按钮)

4、 登陆后,再看cookies变化,发现多了两组参数,多的这两组参数就是我想要的,copy出来

5、 先登录我的博客首页:https://www.cnblogs.com/czb4256/ ,没有进入到登陆主页面

添加coookie后刷新页面,接下就是见证奇迹的时刻了。

一、Js控制滚动条高度

1、滚动条回到顶部:

Js=”var q=document.getElementById(‘id’).scrollTop=0”

Driver.execute_script(js)

2、拉滚动条到底部

Js=“var q=document.documentElement.scrollTop=10000”

Driver.execute_script(js)

3、这里可以修改scrollTop的值,来定位右侧滚动条的位置,0是最上面,10000是最低部

       4、横向滚动条

①有时候浏览器页面需要左右滚动条(一般屏幕最大化后,左右滚动条的情况已经很少见)

②通过左边控制横向和纵向滚动条scrollTo(x,y)

js=”window.scrollTo(100,400);”

driver.execute_script(js)

元素聚焦

1、虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需 要操作的元素 在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办 呢?

2、这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。同 样需要借助 JS 去实现。

3、元素聚焦:

target = driver.find_element_by_xxxx()

driver.execute_script("arguments[0].scrollIntoView();", target)

scrollTo函数

scrollTo函数不存在兼容性问题,直接用这个函数即可

----scrollToHeight  获取对象的滚动高度。

----scrollToLeft     设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离

-----scrollToTop    设置或获取位于对象最顶部和窗口中可见内容的最顶端之间的距离

-----scrollToWidth  获取对象的滚动宽度

#滚动到底部

Js=“window.scrollTo(0,document.body.scrollHeight)”

Driver.execute_script(js)

日历控件

1、 打开12306的车票查询界面,再出发日期输入无法直接输入时间

2、 常规思路是点开日历控件弹出框,从日历控件上点日期,这样操作比较烦躁。并且测试不是在日历控件上,只是输入个时间,做下一步的操作

3、 用firebug查看输入框的属性:readonly=“readonly“。如下:

<input id="train_date" class="input" type="text" readonly="" value="2018-07-21">

Webdriver aip

1、查看文档

打开cmd 命令行,输入:python -m pydoc -p 6666

-p参数:表示再本机上启动服务

6666参数:这是服务端口号,随意设置

打开后,界面会出现一个网站:http://localhost:6666/,再浏览器直接打开

2、浏览器查看文档

①在浏览器输入:http;//localhost:6666/

②Built-in Moudles:这个是python自带的模块

原文地址:https://www.cnblogs.com/czb4256/p/10009488.html