热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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“。如下:

 

Webdriver aip

1、查看文档

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

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

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

 

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

2、浏览器查看文档

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

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

 


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • phpcomposer 那个中文镜像是不是凉了 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • springboot启动不了_Spring Boot + MyBatis 多模块搭建教程
    作者:枫本非凡来源:www.cnblogs.comorzlinp9717399.html一、前言1、创建父工程最近公司项目准备开始重构,框 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
author-avatar
dcwzyb_271
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有