鼠标事件
现在的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()