selenium与python爬虫(四)【鼠标行为(目标3)】

selenium的鼠标点击

鼠标地点击可以分为

  1. 单击 click()
  2. 双击 double_click()
  3. 右击 context_click()
  4. 点击鼠标左键,不松开 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的,当然你可以修改,搜索一些微信公众号有教程,这楼里就不阐述了。)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/FUTEROX/article/details/108501045