使用selenium实现浏览器中鼠标右键单击保存文件从而实现图片自动下载功能

使用selenium实现浏览器中鼠标右键单击保存文件

我们选择美图网作为学习的网址:美图网
在这里插入图片描述
在这里插入图片描述
我们可以通过模拟鼠标的右键单击然后保存图片的操作,将图片自动的保存到本地。
具体代码如下:

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
 
action = ActionChains(driver).move_to_element(element)#移动到该元素
action.context_click(element)#右键点击该元素
action.send_keys(Keys.ARROW_DOWN)#点击键盘向下箭头
action.send_keys('v')#键盘输入V保存图
action.perform()#执行保存

结果这样并没有实现。多方查找后,在这个贴子上找到了原因及解决方法:

然而,并木有用,右键是实现了,但无法按出v以及保存。原因是selenium自带的send_keys是在选中某个元素后,给该元素输入键盘上的按键,无法选中系统的弹窗,所以当右键菜单跳出来以后selenium就无能为力了。

原帖

按照博主的建议:

针对该问题,目前主流的方法是安装python模拟键盘的库,例如windows的pypiwin32,linux的virtkey和PyUserInput

我又重新更改了代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup
import re
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import win32api
import win32con
VK_CODE ={'enter':0x0D, 'down_arrow':0x28}
#定义按下键盘事件
def keyDown(keyName):
    win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)

#定义松开键盘事件
def keyUp(keyName):
    win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0)

driver = webdriver.Chrome('D:/chromedriver.exe')
driver.get("https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E7%BE%8E%E5%9B%BE%E7%BD%91&step_word=&hs=2&pn=1&spn=0&di=13200&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=0&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=undefined&cs=113014737%2C3445157660&os=2351244306%2C2367448695&simid=3050896469%2C3730470527&adpicid=0&lpn=0&ln=362&fr=&fmq=1570618921319_R&fm=&ic=undefined&s=undefined&hd=undefined&latest=undefined&copyright=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fgss0.baidu.com%2F-vo3dSag_xI4khGko9WTAnF6hhy%2Fzhidao%2Fpic%2Fitem%2F0df431adcbef7609968039362cdda3cc7dd99e94.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bp7xt_z%26e3Bv54_z%26e3BvgAzdH3Fetjof-8nbml9nnclam-8nbml9nnclamdbdd_z%26e3Bip4s&gsm=&rpstart=0&rpnum=0&islist=&querylist=&force=undefined")
image=driver.find_element_by_xpath('//*[@id="currentImg"]')#定位图片所在的元素
action = ActionChains(driver).move_to_element(image)
# ActionChains(driver).context_click(image).perform()
action.context_click(image).perform()#在图片元素上执行右键单击操作
time.sleep(1)#防止图片未加载出来
win32api.keybd_event(86, 0, 0, 0)#调用按下键盘函数,为函数传入参数“86”,也就是“v”
win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)#松开键盘“V”
time.sleep(1)#等待一秒

keyDown('enter')#按下“确认”按钮
keyUp('enter')#松开确认按钮
time.sleep(1)#等待一秒
print("图片下载完成")

演示
演示

以上都是程序自动化完成的

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
使用 Selenium 实现鼠标和键盘操作可以分为以下步骤: 1. 导入必要的库和模块: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains ``` 2. 实例化一个浏览器对象: ```python driver = webdriver.Chrome() ``` 3. 打开需要操作的网页: ```python driver.get('http://www.example.com') ``` 4. 定位到需要操作的元素: ```python element = driver.find_element_by_xpath('//input[@id="search"]') ``` 5. 使用鼠标和键盘操作: ```python # 输入关键字 element.send_keys('查询关键字') # 模拟回车键 element.send_keys(Keys.ENTER) # 鼠标悬停 ActionChains(driver).move_to_element(element).perform() # 鼠标左键单击 ActionChains(driver).click(element).perform() # 鼠标右键单击 ActionChains(driver).context_click(element).perform() # 模拟键盘操作 ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() ``` 完整代码示例: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome() driver.get('http://www.example.com') element = driver.find_element_by_xpath('//input[@id="search"]') # 输入关键字 element.send_keys('查询关键字') # 模拟回车键 element.send_keys(Keys.ENTER) # 鼠标悬停 ActionChains(driver).move_to_element(element).perform() # 鼠标左键单击 ActionChains(driver).click(element).perform() # 鼠标右键单击 ActionChains(driver).context_click(element).perform() # 模拟键盘操作 ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() driver.quit() ``` 希望这个代码示例可以帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值