前文说了怎么定位元素,接下里的就是怎么通过获取的元素来进行模拟键鼠操作,并告诉大家selenium工具中的特殊操作多窗口和句柄
本文纯属文本笔记分享,需要这次知识的视频教程的小伙伴可以点击文末小卡片免费获取
在前面的几篇中重点介绍了一些元素的到位方法,到位到元素后,接下来就是需要操作元素了。本篇总结了 web 页面常用的一些操作元素方法,可以统称为行为事件有些 web 界面的选项菜单需要鼠标悬停在某个元素上才能显示出来(如百度页面的设置按钮)。
点击(鼠标左键)页面按钮:click()
清空输入框:clear()
输入字符串:send_keys()
send_keys()如果是发送中文的,前面需加 u,如:u"中文",因为这里是输入到 windows 系统了,windows 系统是 GBK 编码,我们的脚本是 utf-8,需要转码为 Unicode 国际编码,返样才能识删到。
# coding :utf-8
from selenium import webdriver
duiver = webdriver.Firefox()
driver.get("https://www.baidu.com")
# inmlicitly_wait是隐式等待,作用全局的
driver.implicitly_wait(10)
driver.find_element_by_id("kw").clear()
# sen _keys里如果是中文的话,前面加u
driver.find_element_by_id("kw").send_keys(u"测试")
driver.find_element_by_id("su").click()
# coding :utf-8
from selenium import webdriver
inport random
duiver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
driver.find_element_by_id("kw").send_keys(u"软件测试")
# submint()模拟enter键提交表单
# coding :utf-8
from selenium import webdriver
inport random
duiver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
driver.find_element_by_id("search-button").click()
driver.find_element_by_id("search-term").clear()
driver.find_element_by_id("searcj-term").send_keys("seleniu")
# 模拟enter键操作回车按钮
driver.find_element_by_id("search-term").send_keys(Keys.ENTER)
4.其它常见的键盘操作:
这里只是列了一些常用的,当然除了键盘事件,也有鼠标事件
import ActionChains
perform() 执行所有 ActionChains 中的行为
move_to_element() 鼠标悬停
3.这里以百度页面设置按钮为例
# coding :utf-8
from selenium import webdriver
inport random
duiver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
# 鼠标悬停在搜索设置按钮上
mouse = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(mouse).perform()
4.除了常用的鼠标悬停事件外,还有
右击鼠标:context_click()
双击鼠标:double_click()
依葫芦画瓢,替换上面案例中对应的鼠标事件就可以了
selenium 提供了一整套完整的鼠标和键盘行为事件,功能还是蛮强大滴。
有些页面的链接打开后,会重新打开一个窗口,对亍这种情况,想
在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,
所以叧需要切换句柄,我们就能在多个页面上灵活自如的操作了。
2.我们用代码去执行点击的时候,发现界面上出现两个窗口,如下
图这种情况就是多窗口了。
3.到这里估计有小伙伴纳闷了,手工点击是 2 个标签,怎么脚本点
击就变成 2 个窗口了,这个在 2.1 里面讲过,脚本执行是不加载配置的,
手工点击是浏览器默认设置了新窗口打开方式为标签,这里用鼠标按住
点二个标签,拖拽出来,也就变成 2 个窗口了,是一回事。
# coding :utf-8
from selenium import webdriver
inport random
duiver = webdriver.Firefox()
driver.get("https://bj.ganji.com")
driver.implicitly_wait(10)
# 获取当前窗口句柄
h = driver.current_window_handle
print h
1.定位赶集网招聘求职按钮,并点击
2.点击后,获取当前所有的句柄:window_handles
# coding :utf-8
from selenium import webdriver
duiver = webdriver.Firefox()
driver.get("https://bj.ganji.com")
driver.implicitly_wait(10)
h = driver.current_window_handle
print h # 打印首页句柄
driver.find_element_by_link_text("招聘求职").click()
all_h = driver.weindow_handles
print all_h #打印所有的句柄
网上大部分教程都是些的第一种方法,这里新增一个更简单的方法,直接从获取所有的句柄 list 里面取值。
方法一:
方法二:
# 方法一:判断句柄,不等于首页就切换
# for i in all_h:
# if i != h:
# driver.switch_to.window(i)
# print driver.title
# 方法二:获取list里面第二个直接切换
driver.switch_to.window(all_h[1])
print driver0title
# 关闭新窗口
2.7.6 参考代码
# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://bj.ganji.com/")
h = driver.current_window_handle
print h # 打印首页句柄
driver.find_element_by_link_text("招聘求职").click()
all_h = driver.window_handles
print all_h # 打印所有的句柄
# 方法一:判断句柄,并等亍首页就切换
# for i in all_h:
# if i != h:
# driver.switch_to.window(i)
# print driver.title
# 方法二:获取 list 里面第二个直接切换
driver.switch_to.window(all_h[1])
print driver.title
# 关闭新窗口
driver.close()
# 切换到首页句柄
driver.switch_to.window(h)
# 打印当前的 title
print driver.title
下篇会为大家带来iframe的操作,最近有点忙,更新也慢了下来,不过从这篇以后尽量会保持在两天一更的
最后的最后点击文末小卡片可以领取视频资料哦,辛辛苦苦制作的没人来看吗,呜呜呜>