鼠标事件

现在的web产品中提供了更丰富的交互方式,例如鼠标右击、双击、悬停、单击、甚至是鼠标拖动等功能。webdriver中,这些方法封装在ActionChains类中,需要导入以下包:from selenium.webdriver.common.action_chains import ActionChains

参考链接:python+selenium鼠标键盘操作(ActionChains类)

常见的方法有:

perform(): 执行所有ActionChains中存储的行为

click(on_element=None) ——单击鼠标左键

click_and_hold(on_element=None) ——点击鼠标左键,不松开

context_click(on_element=None) ——点击鼠标右键

double_click(on_element=None) ——双击鼠标左键

drag_and_drop(source, target) ——拖拽到某个元素然后松开

drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开

key_down(value, element=None) ——按下某个键盘上的键

key_up(value, element=None) ——松开某个键

move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标

move_to_element(to_element) ——鼠标移动到某个元素

move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置

perform() ——执行链中的所有动作

release(on_element=None) ——在某个元素位置松开鼠标左键

send_keys(*keys_to_send) ——发送某个键到当前焦点的元素

send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

 访问百度首页,右击输入框,代码如下:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome(executable_path=r"C:\Users\think\Desktop\chromedriver")
driver.get('http://www.baidu.com')
time.sleep(3)
# 将鼠标悬浮到文本框上
text = driver.find_element_by_xpath('//*[@id="kw"]')
time.sleep(3)
# 将对文本框的操作行为封装到ActionChains
ActionChains(driver).context_click(text).perform()

实现拖拽功能

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome(executable_path=r"C:\Users\think\Desktop\chromedriver")

driver.implicitly_wait(10)
driver.maximize_window()
driver.get('http://sahitest.com/demo/dragDropMooTools.htm')

dragger = driver.find_element_by_id('dragger')  # 被拖拽元素
item1 = driver.find_element_by_xpath('//div[text()="Item 1"]')  # 目标元素1
item2 = driver.find_element_by_xpath('//div[text()="Item 2"]')  # 目标元素2
item3 = driver.find_element_by_xpath('//div[text()="Item 3"]')  # 目标元素3
item4 = driver.find_element_by_xpath('//div[text()="Item 4"]')  # 目标元素4
time.sleep(3)
ActionChains(driver).drag_and_drop(dragger,item1).perform()
time.sleep(3)
#效果与上面相同
ActionChains(driver).click_and_hold(dragger).release(item2).perform()
time.sleep(3)
#效果和以上相同
ActionChains(driver).click_and_hold(dragger).move_to_element(item3).release().perform()

下拉框操作,这里与以往不同,我们首先定位到下拉框的元素,然后选择下拉框的选项进行点击;

from selenium import webdriver
import time
import os
driver = webdriver.Chrome(executable_path=r"C:\Users\think\Desktop\chromedriver")
file_path =  os.getcwd()+os.sep+'drop_down.html'
print(file_path)
driver.get(file_path)
time.sleep(2)
m=driver.find_element_by_id("Single")
m.find_element_by_xpath("//option[@value='女']").click()
time.sleep(3)

driver.quit()

百度设置警告框操作,代码如下:

"""
警告框-alter:是一个模式框,该怎么使用代码的方式去操作他?
1、driver对象是在当前页面窗口内,但是不在alter上,并且我们没办法去定位这个窗口的元素
2、driver.switch_to.alter: 暂时将浏览器对象driver交给alter用
3、可以对警告框做什么事情
    text: 返回(获取)alert/confirm/prompt中的文字信息
    dismiss():放弃现有警告框
    send_keys(keysToSend):发送文本至警告框。
"""
from selenium import webdriver
from selenium.webdriver.common.action_chains import  ActionChains
import time
driver = webdriver.Chrome(executable_path=r"C:\Users\think\Desktop\chromedriver")
driver.get('https://www.baidu.com')
# 等待两秒中
time.sleep(2)
driver.maximize_window()
# 控制鼠标悬浮到设置按钮上
# setButton = driver.find_element_by_link_text("设置")
setButton = driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
# 将对设置按钮的操作行为封装到ActionChains,到这一步,鼠标对象已经知道要干啥事了,还没开始动呢
ActionChains(driver).move_to_element(setButton).perform()
time.sleep(2)
# 鼠标悬浮
driver.find_element_by_link_text('搜索设置').click()
time.sleep(3)
#选择每页展示20条
driver.find_element_by_xpath('//*[@id="se-setting-3"]/span[2]/label').click()
#保存设置后,弹出一个警告框
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
time.sleep(2)
# 对警告框进行操作
dd = driver.switch_to.alert
#获取alert里面的文本信息
tt = dd.text
print(tt)
time.sleep(3)
#接收(确定)这个文本
# dd.accept()
dd.dismiss()

time.sleep(3)

driver.quit()

警告框处理

在webdriver中处理javaScript所生成的alert,confirm,prompt,方法十分简单,具体做法是使用switch_to_alert;方法定位到alert/confirm/prompt,然后使用

text:  返回(获取)         alert/confirm/prompt 中的文字信息

accept():                         接受现有警告框。

dismiss():                        放弃现有警告框。

send_keys(keysToSend):        发送文本至警告框。

键盘事件

键盘事件,keys()类提供了键盘上几乎所有的按键的方法。前面了解到,send_keys()方法可以用来模拟键盘输入,除此之外,我们还可以用它来输入键盘上的按键,甚至是组合键,如Ctrl+A,Ctrl+C等,需要导入以下包:from selenium.webdriver.common.keys import keys

Send_keys(Keys.Back_SPACE):         删除键

Send_keys(Keys. SPACE ):                空格键

Send_keys(Keys.TAB):                        制表键

Send_keys(Keys.ESCAPE):                esc键

Send_keys(Keys.ENTER):                   回车键

Send_keys(Keys.CONTROL ,'a'):         全选

Send_keys(Keys.CONTROL ,'c'):         复制

Send_keys(Keys.CONTROL, 'x'):         剪切

Send_keys(Keys.CONTROL, 'v'):          粘贴

import time

from selenium import webdriver
# 引入keys模块
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(executable_path=r"C:\Users\think\Desktop\chromedriver")
driver.get('https://www.baidu.com')
# 1、百度'seleniumm'
driver.find_element_by_id('kw').send_keys('seleniumm')
time.sleep(3)
# 2、删除多输入的m
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE)
time.sleep(3)

# 3、再输入‘空格 +教程’
driver.find_element_by_id('kw').send_keys(Keys.SPACE)
driver.find_element_by_id('kw').send_keys('教程')
time.sleep(3)

# 4、ctrl+a,全选文本框内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
time.sleep(3)

# 5、ctrl+x,剪切选择的内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x')
time.sleep(3)

# 6、ctrl+v,粘贴复制的内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'v')
time.sleep(3)

# 7、通过回车键来代替单击操作
driver.find_element_by_id('su').send_keys(Keys.ENTER)
time.sleep(3)

driver.quit()