下面是一个关于如何使用您提供的 Python 代码创建并运行一个验证码提取服务器的简单教程。这个教程面向初学者,逐步解释代码的功能并指导如何部署它。
教程:创建并运行一个验证码提取服务器
这个教程将指导您如何使用 Python 创建一个简单的 socket 服务器,用于接收文本数据,提取其中的验证码(4-8位数字),并将其复制到剪贴板,同时显示桌面通知。我们还将介绍如何安装依赖、运行代码并发布使用。
功能概述
该程序是一个基于 socket 的服务器,可以:
-
监听指定端口(默认5000)的传入连接。
-
接收客户端发送的文本数据。
-
从文本中提取第一个4-8位数字(验证码)。
-
将提取的验证码复制到剪贴板。
-
显示一个桌面通知,告知用户结果。
前置条件
在运行代码之前,您需要准备以下内容:
-
操作系统: Windows、Linux 或 macOS。
-
Python 版本: Python 3.6 或更高版本。
-
依赖库: 需要安装 pyperclip 和 plyer 库。
步骤 1:安装依赖
打开终端或命令行,运行以下命令来安装所需的库:
pip install pyperclip plyer
-
pyperclip: 用于操作剪贴板。
-
plyer: 用于显示桌面通知。
步骤 2:理解代码
以下是代码的主要组成部分:
-
导入库:
import socket, re, pyperclip, threading
-
socket: 用于创建网络服务器。
-
re: 用于正则表达式匹配数字。
-
pyperclip: 用于复制文本到剪贴板。
-
threading: 用于异步显示通知。
-
-
SocketServer 类:
-
__init__: 初始化服务器,绑定到指定端口(例如 5000)。
-
start: 启动服务器,接受客户端连接并处理数据。
-
extract_first_long_number: 使用正则表达式提取4-8位数字。
-
show_toast_notification: 异步显示桌面通知。
-
copy_verification_code: 提取验证码并复制到剪贴板。
-
-
主函数:
def main(): SocketServer(5000).start()
创建并启动一个监听在端口 5000 的服务器。
步骤 3:保存代码
将代码保存为一个 .py 文件,例如 socket_server.py。
完整代码如下:
import socket, re, pyperclip, threading
class SocketServer:
def __init__(self, port):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.s.bind(('0.0.0.0', port))
self.s.listen(5)
print(f"Server on port {port}...")
def start(self):
while True:
c, addr = self.s.accept()
print(f"设备地址 {addr}")
data = c.recv(1024)
text = data.decode('utf-8') if data else ""
print(f"接收数据: {text}")
result = self.copy_verification_code(text)
c.send(str(result).encode('utf-8'))
c.close()
def extract_first_long_number(self, text):
"""提取字符串中的第一个符合条件的数字"""
pattern = r'(?<!\d)\d{4,8}(?!\d)'
match = re.search(pattern, text)
if match:
return match.group(0)
return None
def show_toast_notification(self, title, message):
"""显示桌面通知(异步)"""
from plyer import notification
def _show():
try:
notification.notify(title=title, message=message, timeout=2)
except Exception as e:
print(f"Failed to show notification: {e}")
threading.Thread(target=_show).start()
def copy_verification_code(self, text):
"""提取并复制验证码到剪贴板,并显示通知"""
number = self.extract_first_long_number(text)
if number:
pyperclip.copy(number)
print(f"已复制到剪贴板: {number}")
self.show_toast_notification("已复制验证码", number)
return number
else:
print("未找到符合条件的数字字符串")
self.show_toast_notification("复制失败", "请检查短信验证码")
return None
def main():
SocketServer(5000).start()
if __name__ == "__main__":
main()
步骤 4:运行服务器
-
打开终端,进入代码文件所在目录。
-
运行以下命令:
python socket_server.py
-
您将看到输出:
Server on port 5000...
这表示服务器已启动并监听在端口 5000。
步骤 5:测试服务器
您需要一个客户端来发送数据给服务器进行测试。以下是一个简单的客户端代码示例:
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 5000)) # 本地测试使用 127.0.0.1
client.send("Your code is 123456".encode('utf-8'))
response = client.recv(1024).decode('utf-8')
print(f"Server response: {response}")
client.close()
-
将此代码保存为 client.py。
-
在另一个终端运行:
python client.py
-
服务器将输出:
设备地址 ('127.0.0.1', xxxx) 接收数据: Your code is 123456 已复制到剪贴板: 123456
同时,您的剪贴板将包含 123456,并显示一个桌面通知。
步骤 6:发布和使用
-
本地使用: 如果只在本地使用,直接运行服务器即可。
-
远程部署:
-
将代码部署到一台具有公网 IP 的服务器上。
-
修改 client.connect(('127.0.0.1', 5000)) 中的 IP 为服务器的公网 IP。
-
确保防火墙允许 5000 端口的传入连接(例如,在 Linux 上运行 sudo ufw allow 5000)。
-
-
安全性建议:
-
当前代码未加密通信,建议添加 SSL/TLS。
-
可添加身份验证,防止未经授权的访问。
-
示例场景
假设您有一个设备(如手机)接收验证码短信,您可以通过脚本将短信内容发送到此服务器,服务器会自动提取验证码并复制到剪贴板,方便您粘贴使用。
故障排查
-
依赖未安装: 确保运行 pip install pyperclip plyer。
-
端口被占用: 更改 SocketServer(5000) 中的端口号,例如 SocketServer(5001)。
-
通知不显示: 检查 plyer 是否正确安装,且操作系统支持通知。
希望这个教程对您有帮助!如果您需要进一步优化代码(例如添加加密)或有其他问题,请告诉我。祝您的项目成功!