【禁止粘贴的另一种可行性绕过办法】基于模拟输入的实现

在一些网站或者软件中,我们偶尔会遇到那种禁止粘贴的情况发生。通常情况下可以考虑采用开发者模式关闭禁止粘贴的字段设置,或者使用手机移动端的剪贴板来实现内容的直接粘贴。
但是使用开发者模式对部分同志的技术有一定的要求和部分的理解,有些情况又不适合使用移动端来实现打开网站(万一界面没有做移动端适配呢)
所以以下给大家伙提出一种折中的解决方案。
基于python的pynput开发的
此代码使用的时候要注意输入法是英文状态

核心原理

from pynput.keyboard import Controller
keyboard = Controller()

通过keyboard.Controller()创建虚拟键盘控制器,模拟人工逐个字符输入,从而避开系统的粘贴检测机制。
image
这样的话输入的时候的字符串就不会切换到搜狗等输入法中进行干扰中文的输出。
好了,废话不多说,放码过来。

from pynput.keyboard import Controller
import time
import tkinter as tk
from tkinter import filedialog, messagebox

keyboard = Controller()

def type_chinese_with_pynput(text, delay=0.1):
    """使用 pynput 模拟中文输入"""
    for char in text:
        keyboard.type(char)  # 模拟逐字符输入
        time.sleep(delay)

def select_file():
    """弹出文件选择对话框,选择文本文件"""
    filepath = filedialog.askopenfilename(
        title="选择一个文本文件",
        filetypes=(("文本文件", "*.txt"), ("所有文件", "*.*"))
    )
    if filepath:
        file_path_var.set(filepath)

def start_typing():
    """从文件读取内容并启动模拟输入"""
    filepath = file_path_var.get()
    if not filepath:
        messagebox.showerror("错误", "请先选择一个文本文件!")
        return

​```
try:
    with open(filepath, "r", encoding="utf-8") as file:
        text = file.read()
except Exception as e:
    messagebox.showerror("错误", f"无法读取文件:{e}")
    return

try:
    delay = float(delay_var.get())
    if delay < 0:
        raise ValueError("输入延迟不能为负数")
except ValueError:
    messagebox.showerror("错误", "请输入有效的输入延迟(非负数)!")
    return

messagebox.showinfo("提示", "请确保输入法切换为中文!程序将在 5 秒后开始。")
time.sleep(5)
type_chinese_with_pynput(text, delay)
​```

# 创建主窗口

root = tk.Tk()
root.title("中文输入模拟工具")

# 文件路径

file_path_var = tk.StringVar()
tk.Label(root, text="选择文本文件:").grid(row=0, column=0, padx=10, pady=10)
tk.Entry(root, textvariable=file_path_var, width=50).grid(row=0, column=1, padx=10, pady=10)
tk.Button(root, text="浏览", command=select_file).grid(row=0, column=2, padx=10, pady=10)

# 输入延迟

delay_var = tk.StringVar(value="0.1")
tk.Label(root, text="输入延迟(秒):").grid(row=1, column=0, padx=10, pady=10)
tk.Entry(root, textvariable=delay_var, width=10).grid(row=1, column=1, padx=10, pady=10, sticky="w")

# 开始按钮

tk.Button(root, text="开始输入", command=start_typing, bg="green", fg="white").grid(row=2, column=0, columnspan=3, pady=20)

# 启动主循环

root.mainloop()
posted @ 2025-12-01 09:10  北风渡  阅读(0)  评论(0)    收藏  举报