selenium工作原理:什么是框架?
框架 是一个框子指其约束性也是一个架子支撑柱
框架是整个或部分系统的可重用设计
框架是某种应用的半成品
为什么使用框架?
(1)自己从头实现太复杂
(2)使用框架能够更专注于业务逻辑 加快开发速度
(3)框架的使用能够处理更多细节问题
(4)使用人数多 稳定性 扩展性好
selenium环境搭建
(1)python3.7
(2)Firefox35(大于43)
(3)selenium2框架
稳定性2.48.(pip install selenium--2.48.0)
(4)浏览器驱动
chrome
ie
seleniumApi基础:1.首先写对应的代码调用驱动 导入selenium包 (pip install selenium==2.48.0)
2. 通过驱动点开浏览器 浏览器是自己设定的(火狐/chrome/ie)
3.通过浏览器设置的对象访问网址
4.访问完项目 告诉浏览器代码实现完成 浏览器会通知执行完成 驱动会继续执行下一行代码
代码执行完成——>驱动——>浏览器——>浏览器中实现
运行结果:
seleniumApi获取断言信息:(1)库的导入
from selenium import webdriver
(2)创建浏览器对象
driver =webdriver.xxx()(xxx可以是火狐/chrome/ie)
(3)浏览器尺寸相关
driver.maximize_window() 最大化
driver.get_window_size() 获取浏览器尺寸
driver.set_window_size() 设置浏览器尺
driver.get_window_position() 获取浏览器位置
driver.set_window_position(x,y) 设置浏览器位置
(4)浏览器的关闭 *** 作
close() 关闭当前标签/窗口
quit () 关闭所有标签/窗口
(5)页面请求 *** 作
driver.get(url) 请求某个url对应的响应
refresh() 属性页面 *** 作
back() 回退到之前的页面
forward() 前进到之后的页面
元素的定位(八种):断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。
获取断言信息的 *** 作:
corrent_url 获取当前访问页面url
title 获取当前浏览器标题
get_screenshot_as_png() 保存图片
get_screenshot_as_file(file) 直接保存
page_source 网页源码
获取当前访问页面url:
获取当前浏览器标题:
直接保存图片:
Selenium API高级:(1)元素定位方法的分类
1.直接调用性(推荐)
diver.find_element_by_xxx(value)
2.使用by类型(导入by)
from selenium.webdriver.common.by imprort by
driver.find_element(by.xxx,value)
元素定位方法的分类:
第一种方式元素定位调用id:
第二种方式元素定位调用name:
第三种方式元素定位调用class name:
第四种方式元素定位调用link text 指定字段查询:
第五种方式元素定位调用 by partial link text 模糊查询:
第六种方式元素定位调用 xpath:
第七种方式元素定位调用css:
第八种方式元素定位调用 tag:
1.多标签之间的切换
(1)获取所有窗口的句柄
handles=driver.window_handles
调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的值存放在里面
(2)通过窗口的句柄激活进入某一窗口
driver.switch_to_window(handles[n])
driver.switch_to.window(handles[n])
通过窗口句柄激活进入某一窗口
案例:
58同城租房信息:【58同城 58.com】北京分类信息 - 本地 免费 高效
2.多表单切换
在网页中,表单嵌套是很常见的情况,尤其是在登录的场景
(1)什么是多表单?
实际上就是使用iframe/frame,引用了其他页面的连接,真正的页面数据并没有出现当前源码中,但是在浏览器中我们看到,简单理解可以使页面中公开一个窗口显示另一个页面
(2)处理方法
直接使用id值切换进表单
drive.switch_to.frame(value)/drver.switch_to_frame(value)
定位到表单元素,在切换进入
el=drive.find_element_by_xxx(values)
driver.switch_to.frame(el)/driver.switch_to_frame(el)
案例:
QQ空间:QQ空间-分享生活,留住感动
126网站登录:126网易免费邮--你的专业电子邮 (需要谷歌的 *** 作)
需要把谷歌浏览器导入python中
3.d出框 *** 作
(1)进入到d出框中
driver.switch_to.alert
(2)接收警告
accept()
(3)解散警告
dismiss()
(4)发送文本到警告框
send_key(data)
4.滚动条 *** 作
js = ‘window.scrollTo(0,b)‘ #b表示距离定位的距离
driver.execute_script(js) #执行js脚本 滚动条回到顶部
js = "window.scrollTo(0,0)" 或者
js=“var q=document.documentElement.scrollTop=0“ 滚动条回到底部
js = “window.scrollTo(0,document.body.scrollHeight)” 或者
js="var q=document.documentElement.scrollTop=10000“
滚动条拉到指定位置(具体元素):
--最常用
target = driver.find_element_by_id(“id_keypair”) #定位移动到的元素 driver.execute_script("arguments[0].scrollIntoView();", target)
参考:https://blog.csdn.net/qq_39247153/article/details/81902559
浏览器等待5.鼠标和键盘 *** 作
(1)鼠标 *** 作
导入动作链类,动作链可以储存鼠标的动作
from selenium.webdriver import ActionChains
获取元素
el=driver.find_element_by_xxx(value)
contexte_click(el) 对el指向右击
执行ActionChains中存储的所有动作
perfrom()
例如:ActionChains(driver).context_click(ele).perform() 点击鼠标右键 ActionChains(driver). click(ele).perform() 点击鼠标左键 ActionChains(driver).move_to_element(el).perform() 鼠标悬停
(2)键盘 *** 作
键盘 *** 作使用的是keys类,一般配合send_keys使用
导入
from selenium.webriver.common.keys import keys
常用键盘 *** 作
send_keys(Keys.BACK_SPACE) 删除键(BackSpace) send_keys(Keys.SPACE) 空格键(Space) send_keys(Keys.TAB) 制表键(Tab) send_keys(Keys.ESCAPE) 回退键(Esc) send_keys(Keys.ENTER) 回车键(Enter) send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A) send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X) send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V) send_keys(Keys.F1) 键盘 F1
……
send_keys(Keys.F12) 键盘 F12
案例: 必应搜索执行键盘 *** 作
(1)为什么要进行等待?
1.网速慢
2.网站内容过多
3.如果不进行等待而直接定位元素,可能会抛出异常
(2)selenuium中等待的分类:
强制等待
显示等待
隐式等待
强制等待
导入定时等待库
from time import sleep或者import time
time.sleep(3)表示强行等待3s在执行下一句代码
这种等待方式时间到了就会执行写一个语句 但比较死板 不能保证在等待的时间内元素真正被加载了出来。而且如果等待的元素已经被加载出来,还需要等待到时间才会执行下一句,浪费时间。
隐式等待
注:隐式等待的作用域是全局,所以一般设置在整局代码的头几行。
driver.implicitly_wait(30)等待30s
这个等待表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到时间截止,然后再继续下一步。 这个方法的缺点是你需要的元素已经加载出来了,但页面还没有加载完,再需要继续等待页面加载完才能执行下一步 *** 作。
显示等待
需要导入的包:
#导入显性等待的包
from selenium.webdriver.support.wait import WebDriverWait
#判断所需要的元素是否已经被加载出来
from selenium.webdriver.support import expected_conditions as EC
#定位
from selenium.webdriver.common.by import By
等待总结:
强制等待:傻瓜式等待,不智能
隐式等待:全局通用 只需设置一次,很智能 (等到了就走 不会浪费时间)
显示等待:等待元素处于特定条件的时候使用,很智能(等到了就走 不会浪费时间)
练习:
1:使用游览器登录http://www.baidu.com
2:搜索淘宝官网
3:登录用户名和密码
4:搜索商品(手机,电脑,,,,),给定约束条件(价格,包邮,发货地址。。。)
5:将商品添加到购物车
6:在购物中游览该商品
7:根据自己的喜好进行下面的 *** 作
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)