除了页面元素本身的点击,输入,浏览器的操作等事件,我们还会涉及到鼠标,键盘等一系列的操作。那么这么动作怎么实现呢?仔细看好了,这里也会把这些汇总起来。还是以百度为例
三,操作鼠标事件的api,首先要知道关于鼠标操作的方法封装在ActionChains类提供,那么要先导入这个类
特别说明的是大家可以发现,每个鼠标动作后面都有个perform(),这个的意思是:执行ActionChains类中存储的所有动作,也可以理解为对动作的提交,也就是说真正的执行该动作。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
el_input = driver.find_element_by_id("kw")
el_shezhi = driver.find_element_by_name("tj_settingicon")
el_input.send_keys("selenium")
el_btn = driver.find_element_by_id("su")
#鼠标单击
ActionChains(driver).click(el_btn).perform()
#右击
ActionChains(driver).context_click(el_btn).perform()
#双击
ActionChains(driver).double_click(el_btn).perform()
#拖动
ActionChains(driver).drag_and_drop(el_btn).perform()
#鼠标悬停
ActionChains(driver).move_to_element(el_shezhi).perform()
四,键盘操作事件,键盘上辣么多的键,怎么操作了,请看代码,有三种方式实现
(1)通过Keys类实现,引入包:from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
el_input = driver.find_element_by_id("kw")
el_input.send_keys("fsafsaf")
#删除键(BackSpace)
el_input.send_keys(Keys.BACK_SPACE)
#空格键(Space)
el_input.send_keys(Keys.SPACE)
#制表键(Tab)
el_input.send_keys(Keys.TAB)
#回退键(Esc)
el_input.send_keys(Keys.ESCAPE)
#回车键(Enter)
el_input.send_keys(Keys.ENTER)
#全选(Ctrl+A)
el_input.send_keys(Keys.CONTROL,'a')
#复制(Ctrl+C)
el_input.send_keys(Keys.CONTROL,'c')
#剪切(Ctrl+X)
el_input.send_keys(Keys.CONTROL,'x')
#粘贴(Ctrl+V)
el_input.send_keys(Keys.CONTROL,'v')
#键盘 F1
el_input.send_keys(Keys.F1)
#键盘 F12
el_input.send_keys(Keys.F12)
(2)通过key_down()(按下键盘),send_keys,key_up()(释放键盘)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
el_input = driver.find_element_by_id("kw")
el_input.send_keys("selenium")
#全选
ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
#剪切
ActionChains(driver).key_down(Keys.CONTROL).send_keys('x').key_up(Keys.CONTROL).perform()
driver.get("http://www.baidu.com")
el_input = driver.find_element_by_id("kw").click()
#粘贴
ActionChains(driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
3.通过第三方的模块来实现,需要安装pywin32模块:pip install pywin32
import win32api
import win32con
class KeyboardKeys(object):
#模拟键盘按键类
VK_CODE={
'enter':0x0D,
'ctrl':0x11,
'v':0x56
}
@staticmethod
def keyDown(keyName):
#按下按键
win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,0,0)
@staticmethod
def keyUp(keyName):
#释放按键
win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,win32con.KEYEVENTF_KEYUP,0)
@staticmethod
def oneKey(key):
#模拟单个按键
KeyboardKeys.keyDown(key)
KeyboardKeys.keyUp(key)
@staticmethod
def twoKeys(key1,key2):
#模拟两个组合键
KeyboardKeys.keyDown(key1)
KeyboardKeys.keyDown(key2)
KeyboardKeys.keyUp(key2)
KeyboardKeys.keyUp(key1)