selenium 原理?
用python和java都可以写
通过插件写一些代码和脚本操作浏览器,会通过selenium 翻译器把脚本翻译成,selenium core 这种json 格式数据报文, 并且发给远端的浏览器
因为浏览器厂商,火狐和谷歌有一套特殊自动定制机制,会生成js 操作后,返回一个结果给 selenium core 在返回给你的脚本
这套流程翻译的数据的格式和过程符合webdriver协议
想要定位元素,首先你要知道你要找到元素!!!!!!!!!!!!!!!!
driver.find 有一系列的方法就是寻找的方法
因为查询元素的方式不一样,driver.find方法也不一样
第一你基本的逻辑思想怎么去思考?????????
先要懂概念,有了概念才能去操作
元素,对象,控件 (比如一些按钮)的前提了解?????
html<input id='a' name='b'>xxxxx</input>
1.标签名称和元素类型 input 可以理解html<input id='a' name='b'></input> 是一个元素,对象,控件 里面的内容是文本值
也叫text
2.再比如<button>登录</button>
button 是个按钮,为什么button按钮为什么有一个text ,这个text是给用户看的,button是元素的标签名称
3. 属性id 是唯一 的, name 属性呢啥意思??(提交给服务器的名称)
class属性(这个属性是给元素进行分类的样式)class重复性很高
一般定位方法(有id用id ,没有id用name,如果也没有用calss,或者取text值,如果都找不到,需要使用特殊上下级关系的复杂语句 xpath)
4.操作链接 a标签 可以定位链接的文本字
这种使用text值保证他不重复
5.如果都找不到,需要使用特殊上下级关系的复杂语句 xpath
常见的元素类型????????
input输入域 根据输入域的type类型的不同长的不一样
button按钮
select 下拉列表 现在好多不用了
ul 列表
a 超链接
image 图片
table 表格
form 表单
div 块元素
文本 p段落 span短文本 同行
滚动屏幕到底部的两种方法??????
第一种
from selenium.webdriver.common.action_chains import ActionChains as ac
driver.execute_script('window.scrollTo(0,5000)')#滚动屏幕
ac=ActionChains(driver)
第二种
driver.execute_script('window.scrollTo(0,3000)') js方法
取值类操作,只有两种方法????取元素和取文本值?????
1.获取文本值 driver.find_element_by_id('readme').text
2.获取属性值 driver.find_element_by_class_name('baidu').get_attribute('href')
如果你想打开一个新窗口覆盖旧的窗口,不想开多个窗口,怎么防止新窗口不弹出???
link=driver.find_element_by_class_name('baidu').get_attribute('href')
driver.get(link)
time.sleep(2) 预期只打开新窗口,旧窗口自动关
下拉框的操作???????????????????????????
单独的控制操作,需要注意 操作前from selenium.webdriver.support.select import Select 这行代码ctrl +webdriver 放到这个类下
elenent=driver.find_element_by_name('select')#把下拉列表对象
select=Select(elenent)#创建对象
# select.select_by_index()#取下拉的下标
select.select_by_value('1')#最靠谱
time.sleep(2)
driver.maximize_window()
select.select_by_value('2')#最靠谱
# select.select_by_visible_text()#最不靠谱取值,文本内容
循环选择下拉框所有内容????????
for i in range(0,len(select.options)):
select.select_by_index(i)
time.sleep(2)
连续动作的操作????
from selenium.webdriver.common.action_chains import ActionChains 前提导入语句
driver.execute_script('window.scrollTo(0,1000)')#滚动屏幕
ac=ActionChains(driver)
#拖动鼠标到某个按钮
ac.move_to_element(driver.find_element_by_class_name("over"))#焦点移动到那个元素
ac.perform()#动作回放表演
双击操作??????????
import time
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('file:///G:/a-%E5%88%98%E6%B3%BD%E8%80%81%E5%B8%88%E8%A7%86%E9%A2%91/ui%E8%87%AA%E5%8A%A8%E5%8C%96/ui%E8%87%AA%E5%8A%A8%E5%8C%96/demo.html')
time.sleep(2)
driver.execute_script('window.scrollTo(0,1000)')#滚动屏幕
ac=ActionChains(driver)
#拖动鼠标到某个按钮 点击某个位置触发
ac.move_to_element(driver.find_element_by_class_name("over"))#焦点移动到那个元素
ac.perform()#动作回放表演
time.sleep(2)
ac.double_click(driver.find_element_by_class_name('double'))#双击
ac.perform()#动作回放表演
拖拽的操作????????????????????????比如把一个位置从左滑到右
ac.drag_and_drop(driver.find_element_by_xpath("//div[@id='slider']/span"),
driver.find_element_by_id("slider_confirm"))
ac.perform()