selenium提供了完整的模拟键盘操作事件,在模拟键盘操作需要先导入键盘模块
from selenium.webdriver.common.keys import Keys
import timefrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()try:driver.get(url='https://www.baidu.com/')driver.implicitly_wait(10)locator = (By.XPATH,"//*[@id='kw']")ele = WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locator))ele.send_keys("Python is good") # 向输入框输入“Python is good"字符time.sleep(1)ele.send_keys(Keys.BACK_SPACE) # 在输入框中模拟敲击键盘BACK_SPACE键time.sleep(1)ele.send_keys(Keys.SPACE) # 在输入框中模拟敲击键盘SPACE键ele.send_keys("d")time.sleep(1)ele.send_keys(Keys.CONTROL,'a') # 把输入框中的内容全选 ctrl+Atime.sleep(1)ele.send_keys(Keys.CONTROL,'c') # 复制输入框中的内容 ctrl+Ctime.sleep(1)ele.clear() # 清空输入框time.sleep(1)ele.send_keys(Keys.CONTROL,'v') # 在输入框中粘贴内容 ctrl+Vprint(ele)except Exception as e:raise efinally:time.sleep(3)driver.quit()
以下为常用的键盘操作:
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)send_keys(Keys.SPACE) 空格键(Space)send_keys(Keys.TAB) 制表键(Tab)send_keys(Keys.ESCAPE) 回退键(Esc)send_keys(Keys.ENTER) 回车键(Enter)send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)send_keys(Keys.LEFT) 方向键左(Left)send_keys(Keys.UP) 方向键上(Up)send_keys(Keys.RIGHT) 方向键右(Right)send_keys(Keys.DOWN) 方向键下(Down)
模拟鼠标操作
from selenium.webdriver.common.action_chains import ActionChains
调用ActionChains的方法时不会立即执行,会将所有的操作按顺序存放在一个队列里,当调用perform()方法时,队列中的事件会依次执行,支持链式写法或者分步写法;
from selenium import webdriverimport timefrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()try:driver.get(url='https://www.baidu.com/')driver.implicitly_wait(10)locator = (By.CSS_SELECTOR,"#s-top-left > div > a")ele = WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locator))ActionChains(driver).move_to_element(ele).click().perform() # 移动鼠标到ele元素对象然后进行点击time.sleep(3)print(ele)except Exception as e:raise efinally:time.sleep(3)driver.quit()
perform() 执行链中的所有动作click(on_element) 单击鼠标左键context_click(on_element) 点击鼠标右键double_click(on_element) 双击鼠标左键move_to_element(to_element) 鼠标移动到某个元素ele.send_keys(keys_to_send) 发送某个词到当前焦点的元素click_and_hold(on_element) 点击鼠标左键,不松开release(on_element) 在某个元素位置松开鼠标左键key_down(value, element) 按下某个键盘上的键key_up(value, elemen) 松开某个键drag_and_drop(source, target) 拖拽到某个元素然后松开drag_and_drop_by_offset(source, xoffset, yoffset) 拖拽到某个坐标然后松开move_by_offset(xoffset, yoffset) 鼠标从当前位置移动到某个坐标move_to_element_with_offset(to_element, xoffset, yoffset) 移动到距某个元素(左上角坐标)多少距离的位置send_keys_to_element(element, keys_to_send) 发送某个键到指定元素
