Python操作鼠标键盘和爬虫

一.pyautogui 库

pyautogui 是一个 Python 库,允许控制鼠标和键盘。可以通过它编写 Python 脚本来自动执行各种任务,例如点击按钮、输入文本、移动鼠标等。这个库非常适合用来编写自动化脚本来完成重复性的工作,比如网页表单填写、屏幕截图、GUI测试或者爬虫等。

pip install pyautogui

二.常用功能

1. 获取屏幕大小

import pyautogui# 获取屏幕尺寸
screen_width, screen_height = pyautogui.size()
print("屏幕尺寸: %d x %s" % (screen_width, screen_height))

2.移动鼠标到屏幕中央

# 移动鼠标到屏幕中央
center_x, center_y = screen_width // 2, screen_height // 2
# duration 是移动时间, 默认为0, 这里在一秒内移动到中间
pyautogui.moveTo(center_x, center_y, duration=1)

3.单击鼠标

# 指定位置单击鼠标
pyautogui.click(button_x, button_y)

4.右键点击鼠标

pyautogui.click(button='right')

5.双击鼠标

# 指定位置双击鼠标
pyautogui.doubleClick(button_x, button_y)

6.键盘输入

# 输入文本
pyautogui.typewrite("Hello, world!")

7.按下按键

# 按下 enter 键
pyautogui.press('enter')

8.按下组合键

### 按下组合键 Ctrl+S
pyautogui.hotkey('ctrl', 's')

9.截取全屏并保存

# 截取全屏并保存
screenshot = pyautogui.screenshot()
screenshot.save("screenshot.png")

10.截取部分屏幕

# 截取部分屏幕
region = (0, 0, 300, 400)  # x, y, width, height
screenshot = pyautogui.screenshot(region=region)
screenshot.save("screenshot_region.png")

三.根据与图像寻找位置并双击

1. 寻找屏幕中的 button.png 的位置, 并双击

import pyautogui
import timetime.sleep(5)# 查找图像在屏幕上的位置
button_location = pyautogui.locateOnScreen('button.png')if button_location:# 获取图像的中心位置button_x, button_y = pyautogui.center(button_location)# 点击图像中心pyautogui.doubleClick(button_x, button_y)
else:print("按钮未找到")

2.对于找不到图片的问题

有时候图像的分辨率不合适, 或者匹配度不高, 可以增加 locateOnScreen() 的 confidence 参数为匹配度, 当匹配度高于指定值, 则匹配位置但是需要安装 OpenCV 的包

pip install opencv-python
import pyautogui
import timetime.sleep(5)# 查找图像在屏幕上的位置
button_location = pyautogui.locateOnScreen('button.png', confidence=0.8)if button_location:# 获取图像的中心位置button_x, button_y = pyautogui.center(button_location)# 点击图像中心pyautogui.doubleClick(button_x, button_y)
else:print("按钮未找到")

3.指定区域搜索图像

locateOnScreen() 还可以增加 region 参数, 在指定区域内寻找

# 定义屏幕区域 (x, y, width, height)
region = (100, 100, 800, 600)button_location = pyautogui.locateOnScreen('button.png', region=region, confidence=0.8)

四.爬虫

我们常见的爬虫, 有分析网页的, 有分析后端接口的, 其实还有这种简单粗暴, 直接操作鼠标键盘进行重复性保存的, 比如有某个网站有一个图片组成的电子书, 需要点击按钮到下一页, 如果手动保存的需要一个个另存为, 但是因为下一页的位置是固定的, 每页图片出现的位置是固定的, 所以直接可以使用 pyautogui 代替我们进行手动的翻页和另存为。

1. 寻找按钮的位置

我们可以按照上面说的, 根据按钮的截图自动取寻找按钮的坐标, 但是精度不能保证, 或者相似的图标太多都是问题。

我们也可以先读出按钮的坐标, 如下所示, 在5秒内将鼠标移动到按钮位置, 然后等待打印就可以获取了

import pyautogui
import timeprint("请在5秒内将鼠标移动到按钮位置...")
time.sleep(5)
button_position = pyautogui.position()print(f"按钮位置: {button_position}")

2.爬虫

主要是进行另存为和翻页的功能

import pyautogui
import time# 设置按钮的位置 (x, y), 就是下一页的位置
button_x, button_y = 1896, 598# 等待操作完成,比如新页面加载或弹出框出现
time.sleep(3)cnt = 1
# 387 为操作次数, 比如一个
while cnt < 387:# 点击按钮, 进行翻页if cnt > 1:pyautogui.click(button_x, button_y)# 等待翻页成功time.sleep(1)# 将鼠标移动到屏幕中间 (假设图片在屏幕中间)screen_width, screen_height = pyautogui.size()center_x, center_y = screen_width // 2, screen_height // 2pyautogui.moveTo(center_x, center_y)# 右键点击以弹出菜单pyautogui.click(button='right')# 等待菜单出现time.sleep(1)# 模拟按键操作(假设另存为是上下箭头后回车)# 需要调整按键序列以匹配实际情况# 下箭头(因为另存为按钮在第二的位置)pyautogui.press('down')  pyautogui.press('down')# 回车pyautogui.press('enter')# 等待另存为窗口出现time.sleep(2)# 模拟按键操作以输入文件名并保存file_path = '%d.jpg' % cntpyautogui.typewrite(file_path)# 等待一秒键入成功time.sleep(1)# 这个按钮是将输入法中的文字键入地址框pyautogui.press('enter')# 这个按钮是指执行文件另存为时的保存按钮pyautogui.press('enter')# 等待保存和下载完成time.sleep(2)cnt += 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STC8增强型单片机开发——定时器Timer

一、定时器 定时器是一种计时装置&#xff0c;通常由一个晶体振荡器提供时钟信号&#xff0c;可以计时一定的时间后执行相应的操作。在单片机中&#xff0c;定时器一般是由计数器和时钟源组成的&#xff0c;可以用来产生一定时间间隔的中断信号&#xff0c;或者用于测量输入信号…

开放式运动耳机哪款好用?五款高性能值得信赖产品推荐

身为户外运动的达人&#xff0c;我发现开放式运动耳机简直是咱们运动时的最佳拍档&#xff0c;不管是跑步还是健身&#xff0c;开放式运动耳机最为舒适&#xff0c;它的妙处就在于不用塞进耳朵&#xff0c;这样既安全又卫生&#xff0c;户外动起来更放心。但市面上好坏参半&…

AIGC行业:探索发展风口,把握市场脉搏

AIGC行业现在适合进入吗 简介&#xff1a; AIGC行业&#xff1a;探索发展风口&#xff0c;把握市场脉搏 随着人工智能技术的快速发展&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;行业正逐渐成为科技界的新宠。在当前的时代背景下&#xff0c;我们不禁要问&…

Chisel中对对<: 和:的理解(其实是Scala中的理解)

在 Scala 语言和 Chisel 硬件构造语言中&#xff0c;<: 和 : 是用于类型注解的两个不同的符号&#xff0c;它们在泛型编程和类型系统中扮演重要角色。下面是它们各自的意义和用途&#xff1a; <:&#xff08;子类型关系&#xff09; <: 符号在 Scala 中表示子类型关…

Nginx详细介绍一

Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;它也可以作为邮件服务器使用。 Nginx基本介绍 基本概念&#xff1a; Nginx可以处理大量的并发连接&#xff0c;具有很高的稳定性和低资源消耗的特点。它主要用于Web服务、反向代理、负载均衡和HTTP缓存等场景。 安装与配…

【半夜学习MySQL】内置函数(含日期、字符串、数学等函数常用用法介绍及示例详解)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 日期函数字符串函数数学函数其他函数 日期函数 函数名称描述current_date()当前日期current_time()当前时间current_time()…

php8.2使用laravel V11.0

报错&#xff1a;You must enable the openssl extension in your php.ini to load information from https://mirrors.aliyun.com/composer 1、搜索&#xff1a;extension_dir去掉;号 2、搜索&#xff1a;extensionopenssl去掉;号

幻兽帕鲁Palworld服务器手动部署

目录 帕鲁官方文档手动安装steamcmd通过steamcmd安装帕鲁后端客户端连接附录&#xff1a;PalServer.sh的启动项附录&#xff1a;配置文件 帕鲁官方文档 https://tech.palworldgame.com/ 手动安装steamcmd 创建steam用户 sudo useradd -m steam sudo passwd steam下载steamc…

你写HTML的时候,会注重语义化吗?

其实说到语义化&#xff0c;多年前端开发经验的老手估计也不会太在意&#xff0c;有时候工期太紧&#xff0c;有时候自己疏忽&#xff0c;也就不那么在意了&#xff0c;直接DIVCSS一把梭下去了。 目录 什么是HTML 什么是HTML语义化 HTML语义化所带来的好处 我把CSS样式引入…

_pickle.UnpicklingError: STACK_GLOBAL requires str

导致这个报错的原因是我跑yolo的时候修改数据集了&#xff0c;里面的label.cache没有删除&#xff0c;咱只要删除掉缓存就行&#xff01;&#xff01; 我这里是已经删除掉了&#xff0c;所以图片里面没有&#xff0c;一般就是在箭头所示位置有.cache文件的

Vue3知识总结-4

Vue3知识总结-4 文章目录 Vue3知识总结-4插槽Slots渲染作用域默认内容具名插槽插槽中的数据传递具名插槽传递数据 组件声明周期声明周期示意图 组件生命周期的应用动态组件组件保持存活组件被卸载 异步组件依赖注入 插槽Slots 在某些场景中&#xff0c;可能想要为子组件传递一…

xxljob分片广播+多线程实现高效定时同步elasticsearch索引库

需求&#xff1a;为了利用elasticsearch实现高效搜索&#xff0c;需要将mysql中的数据查出来&#xff0c;再定时同步到es里&#xff0c;同时在同步过程中通过分片广播多线程提高同步数据的效率。 1. 添加映射 使用kibana添加映射 PUT /app_info_article {"mappings&quo…

HL7协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.介绍2.传输协议规范2.1. MLLP2.1.1. 数据头定义2.1.2. 转义字符集 2.2. 规范说明2.3. 消息格式说明 3.HL7结构介绍3.1. 患者建档&#xff08;ADT^A28&#xff09;…

linux c++获取当前程序的运行路径

比如我的程序名为:aaa 存放路径是:/homo/code/ 我在/home/ccc 目录执行shell文件。shell文件的内容为 #!/bin/bash /homo/code/aaa我希望获取的路径是 /homo/code/ 而不是脚本的路径 给出完整接口代码 #include <iostream> #include <string> #include <stri…

人工智能领域向量化技术加速多模态大模型训练与应用

目录 前言1、TextIn文档解析技术1.1、文档解析技术1.2、目前存在的问题1.2.1、不规则的文档信息示例 1.3、合合信息的文档解析1.3.1、合合信息的TextIn文档解析技术架构1.3.2、版面分析关键技术 Layout-engine1.3.3、文档树提取关键技术 Catalog-engine1.3.4、双栏1.3.5、非对称…

matlab实现马尔科夫链

在MATLAB中实现马尔科夫链算法通常涉及定义状态转移矩阵、初始化状态向量以及迭代状态转移过程。以下是一个简单的步骤和示例代码&#xff0c;用于演示如何在MATLAB中实现马尔科夫链。 步骤 定义状态转移矩阵&#xff1a;状态转移矩阵P描述了从一个状态转移到另一个状态的概率…

注册海外公司为什么?

注册海外公司通常是为了实现以下目标之一&#xff1a; 国际化业务扩张&#xff1a; 一些企业可能希望在海外注册子公司&#xff0c;以便在国际市场上开展业务。这样的公司可能是跨国企业&#xff0c;已经在多个国家有业务&#xff0c;或者是希望进入新的国际市场的企业。 税收…

计算机服务器中了locked勒索病毒怎么解决,locked勒索病毒解密恢复工具

在网络技术飞速发展的时代&#xff0c;通过网络开展各项工作业务成为众多企业的首选&#xff0c;网络也为企业的生产运营提供了极大便利&#xff0c;大大提升了企业办公效率&#xff0c;但是利用网络避免不了网络威胁的存在&#xff0c;数据安全问题一直是企业关心的主要话题。…

不知道代理IP怎么挑?一文带你了解挑选的关键点!

IP代理在如今的网络环境中扮演者至关重要的角色。通过使用代理IP&#xff0c;可以增强用户个人信息和网络的安全。但想要挑选到适合自己的代理IP&#xff0c;并非是一件易事。今天就为大家带来挑选代理IP的关键注意点&#xff0c;帮你轻松筛选出最佳的选择。 稳定性与速度&…

TikTok机房ip好还是住宅ip好?

住宅ip比较好&#xff0c;机房数据中心IP高效、低价&#xff0c;所以使用的人多且用处复杂&#xff0c;这类ip极大可能存在滥用的黑历史&#xff0c;通过此类ip访问tiktok&#xff0c;被禁止的可能性更高&#xff0c;更容易被拉入黑名单。所以我们推荐tiktok独享原生ip搭建节点…