selenium的鼠标点击
鼠标地点击可以分为
- 单击 click()
- 双击 double_click()
- 右击 context_click()
- 点击鼠标左键,不松开 click_and_hold()
现在以百度地那个例子为例
from selenium import webdriver
from selenium.webdriver.common.by import By
drive=webdriver.Chrome()
drive.get('https://www.baidu.com/')
SubmitBut=drive.find_element(By.XPATH,'//input[@type="submit" and @value="百度一下"]')
SubmitBut.click()
现在使用鼠标
1.导入相关库
2.创建鼠标对象
3.实现相关操作
现在我们使用代码实现这么一个功能(右击百度搜索标签)
代码如下
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains#####
drive=webdriver.Chrome()
drive.get('https://www.baidu.com/')
SubmitBut=drive.find_element(By.XPATH,'//input[@type="submit" and @value="百度一下"]')
action_mouse=ActionChains(drive)######
action_mouse.move_to_element(SubmitBut).context_click().perform()######
搞定
鼠标移动
drag_and_drop(A, B) 将A拖拽到B
drag_and_drop_by_offset(source, x, y) 将A拖拽到某个位置
move_by_offset(x, y) 鼠标从当前位置移动到某个坐标
move_to_element(to_element) 鼠标移动到某个元素
move_to_element_with_offset(A, x, y)移动到距A元素(左上角坐标)多少距离的位置
perform() 执行链中的所有动作
release(on_element=None) 在某个元素位置松开鼠标左键(和clic_and_hold()连用)
send_keys(‘python’) 通过键盘发送’python‘ 可输入字符,模拟按压字母键
send_keys_to_element(At, ‘python’) 向A发送’python’
下面举几个例子,其他的操作方法是一样的
(由于找不到相应的网站来举例子,现在使用伪代码来演示,后面再写一个实例。)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('URL')
dragger = driver.find_element_by_id('dragger') # 被拖拽元素
A = driver.find_element_by_xpath('') # 目标A
B = driver.find_element_by_xpath('') # 目标B
action = ActionChains(driver)
action.drag_and_drop(dragger, A).perform() # 移动dragger到目标A
action.click_and_hold(dragger).release(A).perform() # 效果与上句相同,也能起到移动效果
action.click_and_hold(dragger).move_to_element(A).release().perform() # 效果与上两句相同,也能起到移动的效果
# action.drag_and_drop_by_offset(dragger, 400, 150).perform() # 4.移动到指定坐标
action.click_and_hold(dragger).move_by_offset(400, 150).release().perform() #与上一句相同,移动到指定坐标
常用警醒
1.drag_and_drag_by_offset(A,x,y)一般用于滑块验证啥的
2.move_by_offset(x,y) 的原点坐标是以上一次移动的终点为下一次的原点的,即坐标具有累加效应。
键盘事件
这个和鼠标是一起的,有时候需要使用某些按键比如’空格‘键。
key_down(value, element=None) 按下某个键盘上的键
key_up(value, element=None) 松开某个键
下面是具体的例子。(伪代码)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('URL')
dragger = driver.find_element_by_id('dragger') # 被拖拽元素
A = driver.find_element_by_xpath('') # 目标A
INPUT = driver.find_element_by_xpath('') # 目标B
action = ActionChains(driver)
action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform() # ctrl+a
action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() # ctrl+c
action.key_down(Keys.CONTROL,INPUT).send_keys('v').key_up(Keys.CONTROL).perform() # ctrl+v
action.move_to_element(INPUT).key_down(Keys.CONTROL).send_keys('v')key_up(Keys.CONTROL).perform()#和上一个一样 ctrl+v
真正的实例
生死狙击登陆实例(不要笑很严肃)
下面演示一下如何获取坐标
代码如下;
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.maximize_window()
enter_url='https://ssjj.4399.com/'
driver.get(enter_url)
actions=ActionChains(driver)
actions.move_by_offset(550,370).click().send_keys('865989840')
actions.move_by_offset(-550,-370)#归位
actions.move_by_offset(550,400).click().send_keys('mima')
actions.move_by_offset(-550,-400)
actions.move_by_offset(530,475).click()
actions.move_by_offset(-530,-475).perform()
actions.move_by_offset(400,350).click().perform()
效果
(顺便签了个到,chrome现在是不支持flash的,如果没有特殊修改的话是没法自动运行flash的,当然你可以修改,搜索一些微信公众号有教程,这楼里就不阐述了。)