python+selenium之悠悠博客学习笔记
1 Python之自动化测试框架selenium学习
1.1 基础环境准备
1.1.1 python包下载工具的安装地址:
1.1.2 webdriver
1.2 selenium自动化框架的基础使用
# coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
time.sleep(4) #浏览器响应慢,这是设置响应的时间
driver.get("http://www.178linux.com/")
driver.get_screenshot_as_file("C:\\Users\\mervin\\Desktop\\Python\\1.png") #支持png后缀的图片
driver.refresh() #刷新浏览器操作
driver.back() #返回百度的页面
driver.set_window_size(540, 960)
time.sleep(4)
# driver.forward() #切换到下一页
driver.maximize_window() #设置网页最大化
driver.quit() #退出浏览器的所有进程,然后关闭所有的窗口
1.3 selenium之浏览器元素8种定位方法
1.3.1 火狐浏览器插件环境准备
- FireBug
- FirePath
1.3.2 元素定位方法
- 通过id定位:
find_element_by_id() - 通过name定位:
find_element_by_name() - 通过class定位:
find_element_by_class_name() - 通过tag定位:
find_element_by_tag_name() - 通过link定位:
find_element_by_link_text() - 通过partial_link定位:
find_element_by_partial_link_text()#适用于字符串较长时的模糊匹配,只用截取其中的一部分字符 - 通过Xpath定位:
find_element_by_xpath()#适用于一个元素它既没有id、name、class属性也不是超链接的时候- 点击FireBug,点击FirePath
- 点击选择鼠标
- 选择你要择取的对象.
- 通过CSS定位:
find_element_by_css_selector()- 点击FireBug,点击FirePath,将Xpath改为CSS
- 点击选择鼠标
- 选择你要择取的对象.
1.4 Xpath定位语法
官方介绍:XPath即为XML路径语言,它是一种用来确定XML1(标准通用标记语言3的子集)文档中某部分位置的语言,通俗一点讲就是通过元素的路径来查找到这个元素的,相当于通过定位一个对象的坐标,来找到这个对象
1.4.1 属性定位(name,id,class)
driver.find_element_by_xpath("//*[@id='kw']").send_keys("python")
driver.find_element_by_xpath("//*[@name='wd']").send_keys("python")
driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys("python")
1.4.2 其他属性
driver.find_element_by_xpath("//*[@autocomplete='off']").send_keys("python")
1.4.3 标签
1. 有时候同一个属性,同名的比较多,这时候可以通过标签筛选下,定位更准一点
2. 如果不想制定标签名称,可以用*号表示任意标签
3. 如果想制定具体某个标签,就可以直接写标签名称
driver.find_element_by_xpath("//input[@id='kw']").send_keys("python")
driver.find_element_by_xpath("//input[@name='wd']").send_keys("python")
driver.find_element_by_xpath("//input[@class='s_ipt']").send_keys("python")
1.4.4 层级
- 如果一个元素,它的属性不是很明显,无法直接定位到,这时候我们可以先找它老爸(父元素)
- 找到它老爸后,再找下个层级就能定位到了
driver.find_element_by_xpath("//span[@id='kw']/input").send_keys("python")
1.4.5 索引(从1开始算起)
1. 如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟
2. 虽然双胞胎兄弟很难识别,但是出生是有先后的,于是可以通过它在家里的排行老几定位到
driver.find_element_by_xpath("//select[@id='nr']/option[1]").click()
driver.find_element_by_xpath("//select[@id='nr']/option[2]").click()
driver.find_element_by_xpath("//select[@id='nr']/option[3]").click()
1.4.6 逻辑运算
1. xpath还有一个比较强的功能,是可以多个属性逻辑运算的,可以支持与(and)、或(or)、非(not)
2. 一般用的比较多的是and运算,同时满足两个属性
driver.find_element_by_xpath("//*[@id='kw' and @autocomplete='off']").send_keys("python")
1.4.7 模糊匹配
1. 比如我要定位百度页面的超链接“hao123”,在上一篇中讲过可以通过by_link,也可以通过by_partial_link,模糊匹配定位到。当然xpath也可以有同样的功能,并且更为强大
driver.find_element_by_xpath("//*[contains(text(),'hao123')]").click()
driver.find_element_by_xpath("//*[contains(@id,'kw')]").click()
driver.find_element_by_xpath("//*[start-with(@id,'s_kw_')]").click()
driver.find_element_by_xpath("//*[ends-with(@id,'kw_wrap')]").click()
driver.find_element_by_xpath("//*[matchs(text(),'hao13')]").click()
1.4.8 firefox插件之Selenium Builder
1. 使用说明:http://www.cnblogs.com/yoyoketang/p/6128548.html
1.5 CSS定位语法
1.5.1 css属性定位
- css用#表示ID属性
- css用.表示class属性
- css直接用标签名称,无任何标识符
driver.find_element_by_css_selector("#kw").send_keys("python")
driver.find_element_by_css_selector(".s_ipt").send_keys("python")
driver.find_element_by_css_selector("input").send_keys("python")
1.5.2 通过其他属性
driver.find_element_by_css_selector("[name='wd']").send_keys("python")
1.5.3 可以通过标签与属性的组合来定位元素
driver.find_element_by_css_selector("input.s_ipt").send_keys("python")
1.5.4 层级关系
driver.find_element_by_css_selector("form#form>span>input").send_keys("python")
1.5.5 css索引[nth-child(1)]
driver.find_element_by_css_selector("select#nr>option:nth-child(1)").send_keys("python")
1.5.6 css逻辑运算
driver.find_element_by_css_selector("input[id='kw'][name='wd']").send_keys("python")
1.6 定位一组元素
1.7 selenium的操作元素
1.7.1 selenium的一些事件方法
- submit():相当于键盘中的Enter
- clear():清空操作
- click():相当于鼠标左键
- send.keys():输入字符
1.7.2 键盘操作事件
适用于没有操作的按钮,以及在使用submit()出错的情况下
- 导入模块
from selenium.webdriver.common.keys import Keys - 使用
send_keys(Keys.ENTER)模拟enter键 - 常用的键盘操作事件有以下几种
- 键盘F1到F12:send_keys(Keys.F1) 把F1改成对应的快捷键
- 复制Ctrl+C:send_keys(Keys.CONTROL,'c')
- 粘贴Ctrl+V:send_keys(Keys.CONTROL,'v')
- 全选Ctrl+A:send_keys(Keys.CONTROL,'a')
- 剪切Ctrl+X:send_keys(Keys.CONTROL,'x')
- 制表键Tab: send_keys(Keys.TAB)
1.7.3 鼠标操作事件
当然除了键盘事件,也有鼠标事件,如:鼠标悬停在某个元素上,鼠标右击,鼠标按住某个按钮拖动
- 首先需要导入模块
from selenium.webdriver.common.action_chains import ActionChains - 常用的鼠标操作
- move_to_element():鼠标悬停
- context_click():右击鼠标
- double_click():双击鼠标
1.8 多窗口,句柄
浏览器窗口的属性是通过句柄(handle)来识别的
h=driver.current_window_handle
all_h=driver.window_handles
1.9 iframe之间的切换
iframe的切换默认是支持id和name的
1.9.1 直接使用frameid
driver.switch_to_frame("FRAME_ID") #里面是frame_id
driver.find_element_by_name("email").send_keys("123")
1.9.2 没有frameid的情况下
- 首先定位iframe
- 然后使用8种方法具体定位
iframe=driver.find_element_by_tag_name("iframe")
driver.switch_to_frame(iframe)
driver.find_element_by_name("emial").send_keys("123")
1.9.3 释放iframe
driver.switch_to_default_content()
1.9.4 switch_to_frame上的横线
driver.switch_to.frame()
1.10 下拉列框Select
1.10.1 二次定位
- 先定位select框
- 再定位select里的选项
driver.find_element_by_id("nr").find_element_by_xpath("//option[@value='50']").click()
1.10.2 select模块
导入包:from selenium.webdriver.support.select import Select
s=driver.find_element_by_id("nr")
Select(s).select_by_index(2)
s=driver.find_element_by_id("nr")
Select(s).select_by_value("20")
s=driver.find_element_by_id("nr")
Select(s).select_by_visible_text("每页显示50条")
- 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() :取消对应文本选项
- first_selected_option() :返回第一个选项
- all_selected_options() :返回所有的选项
1.11 alert/confirm/prompt
1.11.1 alert/confirm/prompt弹出框的操作有:
- text:获取文本值
- accept() :点击"确认"
- dismiss() :点击"取消"或者叉掉对话框
- send_keys() :输入文本值 --仅限于prompt,在alert和confirm上没有输入框
切换到alert框上使用switch_to_alert()
注意: 有时候可能会因为鼠标在页面上失去了焦点,没有获取到弹框,我们应该obj.click()主动获取一下
1.12 JS处理滚动条
处理滚动条需要借助js的脚本技术来完成,因此需要execute_script()
- 顶部
js="var q=document.getElementById('id').scrollTop=0"
driver.execute_script(js)
- 底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
- 谷歌浏览器滚动条
js = "var q=document.body.scrollTop=0"
driver.execute_script(js)
python+selenium之悠悠博客学习笔记的更多相关文章
- python实现文章或博客的自动摘要(附java版开源项目)
python实现文章或博客的自动摘要(附java版开源项目) 写博客的时候,都习惯给文章加入一个简介.现在可以自动完成了!TF-IDF与余弦相似性的应用(三):自动摘要 - 阮一峰的网络日志http: ...
- FPGA一个博客学习
FPGA一个博客学习 http://bbs.ednchina.com/BLOG_PERSONALCAT_100185_2001619.HTM
- Python课程设计 搭建博客
安装包Github地址 Python综合设计 233博客 注意还有个email文件是需要填入自己信息的,比如最高权限账号和要发送邮件的账号密码 请安装Python2.7环境,本服务器所用环境为 设置环 ...
- python抓取51CTO博客的推荐博客的全部博文,对标题分词存入mongodb中
原文地址: python抓取51CTO博客的推荐博客的全部博文,对标题分词存入mongodb中
- Python的dict字典结构操作方法学习笔记
Python的dict字典结构操作方法学习笔记 这篇文章主要介绍了Python的dict字典结构操作方法学习笔记本,字典的操作是Python入门学习中的基础知识,需要的朋友可以参考下 一.字典的基本方 ...
- [Python ]小波变化库——Pywalvets 学习笔记
[Python ]小波变化库——Pywalvets 学习笔记 2017年03月20日 14:04:35 SNII_629 阅读数:24776 标签: python库pywavelets小波变换 更多 ...
- 用python爬虫监控CSDN博客阅读量
作为一个博客新人,对自己博客的访问量也是很在意的,刚好在学python爬虫,所以正好利用一下,写一个python程序来监控博客文章访问量 效果 代码会自动爬取文章列表,并且获取标题和访问量,写入exc ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- Python 爬取CSDN博客频道
初次接触python,写的很简单,开发工具PyCharm,python 3.4很方便 python 部分模块安装时需要其他的附属模块之类的,可以先 pip install wheel 然后可以直接下载 ...
随机推荐
- 机器学习的盛宴:NIPS 2015
作者:微软亚洲研究院实习生:林添 冰雪王国的浪漫 机器学习的盛宴 NIPS(Advances in Neural Information Processing Systems,神经信息处理系统进展大会 ...
- JAVA WEB基础巩固之Json、Ajax
一.Json(Json介绍)json校验工具 Json是JavaScript object notation的缩写,优点是易读易编写易于解析: 例如:Object: { "name" ...
- Python在计算内存时应该注意的问题?
我之前的一篇文章,带大家揭晓了 Python 在给内置对象分配内存时的 5 个奇怪而有趣的小秘密.文中使用了sys.getsizeof()来计算内存,但是用这个方法计算时,可能会出现意料不到的问题. ...
- JS逆向某网站登录密码分析
声明: 本文仅供研究学习使用,请勿用于非法用途! 目标网站 aHR0cHM6Ly9hdXRoLmFsaXBheS5jb20vbG9naW4vaW5kZXguaHRt 今日目标网站是某知名支付网站,感觉 ...
- Java工作流引擎结合可视化表单开发,10分钟完成一个业务流程发布
回忆以前工作流引擎的应用,感觉历历在目啊!当初公司接了一个项目关于政府单位公文流转的管理系统,一开始客户跟我画了十多张业务流程图.话说这十多张业务流程图,涉及的业务范围还蛮多,像用审批授权,开通流程, ...
- snmp服务配置
snmp服务配置 1. 检查是否安装 snmp rpm -qa |grep snmp 如未安装 rpm –ivh 加包名 (net-snmp-utils 为各种工具包) 2.服务开启 service ...
- golang在debian下不能用sudo进行使用的问题
sudo ln -s /usr/local/go/bin/go /usr/bin/go 然后就ok了. 去查了下这两个路径的差别,也没查出什么.只是说/usr/bin 是系统预装所在的路径.
- python中if __name__ == '__main__'是什么?
__name__和__main__认识 作用:一般用于测试程序的功能,if __name__ == '__main__':下面的代码会被执行,但当前.py文件被当做模块导入的时候,main下面的代码就 ...
- sql数据库在登录异常时 ora-03114:未连接到ORACLE怎么办
关闭SQL数据,重新启动,登录就好,不要用删除,或者其他方法,如果这麽做还是不可以,那么在想其他办法! 我自己就是这麽做的
- JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器
5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...