selenium webdriver执行浏览器自动化操作,模拟鼠标/键盘执行操作
selenium webdriver执行浏览器自动化操作,模拟鼠标/键盘执行操作
可执行的场景:通过获得浏览器的句柄,执行对浏览器的操作(窗口调整/新建标签页/输入,模拟键盘/戍边执行操作)。
一:环境
使用之前需要先搭配selenium的环境
//可直接在终端输入pip install selenium命令下载selenium的工具包
//因python操作浏览器是通过获取浏览器句柄实现执行操作的,所以需提前下载好与浏览器版本相匹配的驱动
二:使用方法
#导入包
from selenium import webdriver
#实例化句柄方法
driver= webdriver.Chrome(executable_table = ‘下载完的浏览器驱动的路径’)–调用获得浏览器句柄的方法并赋予实例化对象,便于调用类的各类应用方法,其中Chrome为选择的浏览器,也可为FOX浏览器
#操作浏览器窗口
- driver.maxmize_window()——浏览器窗口最大化
- driver.set_window_size(x,y)——自定义浏览器窗口,x = 宽,y = 高
- driver.back()——控制浏览器后退
- driver.forward()——控制浏览器前进
- driver.title——获得浏览器标题
- driver.window_handle()——获得浏览器所有窗口的句柄,返回值是数组格式[XX,YY]
- driver.close() # 关闭当前窗口
- driver.quit()#关闭浏览器驱动,相当于关闭整个浏览器
注:带()的是方法,不带()的是属性
#简单元素对象定位
- ger_element_by_id() ——通过元素id定位
- ger_element_by_name()
- ger_element_by_class_name()
- ger_element_by_link_text()
- ger_element_by_partial_link_test()
- ger_element_by_xpath()
- ger_element_by_css_selector()
通常使用id和name定位元素,text通常用于定位超链接,定位对象使用get,操作对象只需要把定位对象中的 get 替换为find 即可
#常见操作element对象的方法
- find_element_by_xxxx(’’).size #元素尺寸
- find_element_by_xxxx(’’).text #返回元素文本
- find_element_by_xxxx(’’).get.attribute(’’) #获取属性值
- find_element_by_xxxx(’’).is_displayed() #是否用户可见
- find_element_by_xxxx(’’).clear() #清楚元素内容
- find_element_by_xxxx(’’).send_keys(‘输入内容’) #针对输入框案件输入内容
- find_element_by_xxxx(’’).click() #执行单击操作,常用于按钮,确认取消类
- find_element_by_xxxx(’’).submit() #提交表单
#模拟鼠标对浏览器执行操作
需提前导入包
from selenium.webdriver.common.action_chains import Actionchains
获取目标元素,并赋予方法实例化对象
a = driver.find_element_by_XXX(‘对应元素的值’) #获取目标元素,并赋予实例化对象,执行完这一步操作,说明获得了操作鼠标的方法,接下来就是执行鼠标操作元素
鼠标操作方法
ActionChains(driver).context_click(a).perform() #右击目标元ActionChains(driver).double_click(a).perform() # 双击目标元素
ActionChains(driver).move_to_element(el).perform() # 鼠标移动的目标元素上
ActionChains(driver).click_and_hold(el).perform() # 移动到目标元素按下鼠标左键
鼠标拖拉移动方法
获取目标元素的初始位置,并赋予它实例化对象
source = driver.find_element_by_id(‘lg’) #目标原始存在的位置
获取元素最终要移动到的位置,并赋予它实例化对象
target = driver.find_element_by_id(‘kw’) #目标元素移动的最终位置
调用工具包中拖动元素的方法
ActionChains(driver).drag_and_drop(source, target).perform() #拖动元素,从初始位置,到目标位置
模拟键盘时间
需提前导入包
from selenium.webdriver.common.keys import Keys #keys方法就代表键盘工具方法
driver.get(“目标地址url”) #打开目标地址
driver.find_element_by_XXX(“kw”).send_keys(“selenium”) # 输入框输入内容
driver.find_element_by_XXX(“kw”).send_keys(Keys.BACK_SPACE) # 从后删除一个字符(删除键)
driver.find_element_by_XXX(“kw”).send_keys(Keys.SPACE) # 输入空格
driver.find_element_by_XXX(“kw”).send_keys(Keys.CONTROL,‘a’) # ctrl + a 全选输入框内容
driver.find_element_by_XXX(“kw”).send_keys(Keys.CONTROL,‘x’) # ctrl + x 剪切输入框内容
driver.find_element_by_XXX(“kw”).send_keys(Keys.CONTROL,‘v’) # ctrl + v 粘贴
driver.find_element_by_XXX(“su”).send_keys(Keys.ENTER) # 回车
#设置等待时间
固定等待——强制等待,不管什么情况必须等待完毕再执行等待下面的代码
import time
time.sleep(等待的数值) #固定等待XXX秒
隐形等待——设置最大的等待时间,如果再规定时间内加载完成,则执行下面的代码,否则一直等待到时间最大时间截至再执行下一步(这种也有一个弊端,那就如果你需要的元素已经加载出来了,但是页面整体还没有加载完成,程序也会一直等待)
driver.implicitly_wait(最大时间的数值)
显性等待——需要传入一个判断条件的匿名函数,每隔一段时间去判断条件函数,如果条件成立则继续下一步,如果不成立则继续等待
from selenium.webdriver.support.ui import WebDriverWait
例如:
element=WebDriverWait(driver, 10).until(lambda driver:driver.find_element_by_id(“kw”))
代码解析: 当找到id为kw的元素时才执行下一步。超时时间为10秒,默认每0.5秒检测一次。
#拓展作用域知识——如何执行弹窗类元素
针对弹窗类的元素操作,需要把句柄切换到弹窗才能够对弹窗执行操作:switch_to_alert
- driver.swich_to_alert().accept() #accept()方法就是去点击弹窗的确定按钮
- driver.swich_to_alert().dismiss() #dismiss()方法就是去点击弹窗的取消按钮
#拓展作用域知识——如何定位嵌套类型(iframe)类型的元素
包含iframe性质的元素为网页嵌套类型的,一版获得的ip地址的句柄只能执行大窗口的元素定位,对于嵌套在里面的小窗口是无法直接定位的,此时,需要进入frame内层就需要调用switch_to.frame()方法。
- 标签为frame的元素毅然遵循web查找元素定位元素的方法,所以,首先要去定位需要执行操作的嵌套网页的元素
driver.find_element(“定位方式”,“对应的值”) #对应frame标签后面的元素和值 - 赋值变量(熟练的可忽略)
frame = driver.find_element(“定位方式”,“对应的值”) - 把作用域切换到小网页,调用driver.switch_to.frame() 方法
driver.switch_to.frame(frame) #通过先进入frame,然后具体执行 - 按照查找元素进一步去操作嵌套内的元素和方法
- 切换过作用域之后是不能对大网页执行操作的,所以操作完成之后需要再次把作用域切换回来
driver.swich_to_default_content() 把作用域从小网页,切换到大网页
frame方法接收三种参数:frame name、index 和webelement
driver.switch_to.frame(‘frame_name’)
driver.switch_to.frame(1)
driver.switch_to.frame(driver.find_elements_by_tag_name(“iframe”)[0])
#拓展作用域知识——如何实现多窗口的操作
当一个网站执行操作后,打开一个全新的窗口(新建的标签页),之前所获得的句柄也是不能够对新网页执行操作,此时需要把浏览器句柄切换到新网页才能对新网页执行操作
driver.get(“http://example.com”) # 打开一个窗口
now_handle = drvier.current_window_handle # 获取当前窗口句柄
driver.find_element_by_name(‘example’).click() # 点击某个元素打开新的窗口(target="_black"的元素)
获取所有窗口的句柄,返回值是list数组格式,所以针对想要操作具体的那个窗口有以下两种操作
all_handle = drvier.window_handles # 获取所有窗口句柄
1.drvier.switch_to.window(all_handle[-1]) # 通过窗口句柄在返回的数组(list)中的元素位置去获取对应的窗口句柄
2.drvier.switch_to.window(now_handle) # 首先获取单个/多个窗口的句柄,赋值变量,直接去调用句柄
下拉框处理
webdriver处理下拉框首先定位到下拉框内容,然后click某个option即可
m=driver.find_element_by_id(“ShippingMethod”) # 首先定位到下拉框
m.find_element_by_xpath("//option[@value=‘10.69’]").click() # 然后点击下拉框选项
执行JavaScrapt
driver.execute_script(‘Java Scrapt Code’)
例如下拉浏览器滚动条
driver.execute_script(‘window.scrollTo(0, document.body.scrollHeight)’)
Cookie处理
webdriver可以对cookie进行读取、增加、删除
get_cookies() # 获得所有 cookie 信息
get_cookie(name) # 返回特定 name 有 cookie 信息
add_cookie(cookie_dict) # 添加 cookie,必须有 name 和 value 值
delete_cookie(name) # 删除特定(部分)的 cookie 信息
delete_all_cookies() # 删除所有 cookie 信息
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
