Selenium模拟用户的键盘鼠标操作
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
# 要想调用键盘按键操作需要引入keys包
from selenium.webdriver.common.keys import Keys
#创建浏览器对象
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#打印页面标题“百度一下你就知道”
print driver.title
#生成当前页面快照
driver.save_screenshot("baidu.png")
# id="kw"是百度搜索框,输入字符串“微博”,跳转到搜索中国页面
driver.find_element_by_id("kw").send_keys(u"微博")
# id="su"是百度搜索按钮,click() 是模拟点击
driver.find_element_by_id("su").click()
# 获取新的页面快照
driver.save_screenshot(u"微博.png")
# 打印网页渲染后的源代码
print driver.page_source
# 获取当前页面Cookie
print driver.get_cookies()
# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
# 输入框重新输入内容
driver.find_element_by_id("kw").send_keys("test")
# 模拟Enter回车键
driver.find_element_by_id("su").send_keys(Keys.RETURN)
# 清除输入框内容
driver.find_element_by_id("kw").clear()
# 生成新的页面快照
driver.save_screenshot("test.png")
# 获取当前url
print driver.current_url
# 关闭当前页面,如果只有一个页面,会关闭浏览器 # driver.close()
# 关闭浏览器
driver.quit()
1、页面操作寻找方法
如下面一标签
<input type="text" name="user-name" id="passwd-id" />
# 获取id标签值
element = driver.find_element_by_id("passwd-id")
# 获取name标签值
element = driver.find_element_by_name("user-name")
# 获取标签名值
element = driver.find_elements_by_tag_name("input")
# 也可以通过XPath来匹配
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
2、元素定位方法
find_element_by_id
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
3、鼠标动作
from selenium import webdriver
# 要想调用键盘按键操作需要引入keys包
from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains
#创建浏览器对象
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#鼠标移动到某处
action1 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action1).perform()
#鼠标移动到某处单击
action2 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action2).click(action2).perform() #鼠标移动到某处双击
action3 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action3).double_click(action3).perform() # 鼠标移动到某处右击
action4 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action4).context_click(action4).perform()
鼠标常用方法:
- perform():执行所有 ActionChains 中存储的行为。
- context_click():右击
- double_click():双击
- drag_and_drop():拖到
- move_to_element():鼠标悬停
.鼠标右击
context_click():#右击
# 定位到要右击的元素
right_click = browser.find_element_by_id("xx")
# 对定位到的元素执行右击操作
ActionChains(browser).move_to_element(right_click ).perform()
鼠标双击
double_click():#双击
# 定位到要右击的元素
double_click = browser.find_element_by_id('xx')
# 对定位到的元素执行鼠标右键操作
ActionChains(browser).context_click(double_click).perform()
鼠标拖动
drag_and_drop(source,target):#拖动
source:#开始位置;需要拖动的元素
target:#结束位置;拖到后需要放置的目的地元素
# 开始位置:定位到元素的原位置
source = driver.find_element_by_id("xx")
# 结束位置:定位到元素要移动到的目标位置
target = driver.find_element_by_id("xx")
# 执行元素的拖放操作
ActionChains(driver).drag_and_drop(source,target).perform()
鼠标悬停
move_to_element():#鼠标悬停
# 定位到要悬停的元素
move = driver.find_element_by_id("xx")
# 对定位到的元素执行悬停操作
ActionChains(driver).move_to_element(move).perform()
Select表单
遇到下来框需要选择操作时,Selenium专门提供了Select类来处理下拉框
# 导入 Select 类
from selenium.webdriver.support.ui import Select
# 找到 name 的选项卡
select = Select(driver.find_element_by_name('status'))
#
select.select_by_index(1)
select.select_by_value("0")
select.select_by_visible_text(u"xxx")
注意:
- index 索引从 0 开始
- value是option标签的一个属性值,并不是显示在下拉框中的值
- visible_text是在option标签文本的值,是显示在下拉框的值
全部取消方法
select.deselect_all()
5.弹窗处理
当页面出现了弹窗提示
alert = driver.switch_to_alert()
6.页面切换
一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下:driver.switch_to.window("this is window name")
7.键盘动作
Keys类提供了几乎键盘上的所有按键的方法,在前面的博文中有了解到,send_keys()
可以用来模拟键盘输入的操作,除此之外,我们还可以用Keys来模拟键盘上的按键,或者组合键,如Ctrl + C
、Ctrl + V
等等。
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get("https://www.baidu.com/")
#模拟键盘输入“python”:
driver.find_element_by_id("kw").send_keys("python.")
#删除最后一个字符:
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
#模拟键盘输入一个空格:
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
#模拟键盘输入“教程”:
driver.find_element_by_id("kw").send_keys("教程")
#输入框全选:
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
#剪切:
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
#粘贴:
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
#回车:
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
下面介绍几个常用的键盘操作:
- Keys.BACK_SPACE:删除键
- Keys.SPACE:空格键
- Keys.TAB:Tab键
- Keys.ESCAPE:回退键
- Keys.ENTER:回车键
- Keys.CONTROL,”a”:组合键,Ctrl + A
- Keys.CONTROL,”x”:组合键,Ctrl + X
- Keys.CONTROL,”v”:组合键,Ctrl + V
- Keys.CONTROL,”c”:组合键,Ctrl + C
- Keys.F1:F1键
- Keys.F12:F12键