如何使用Python的requests库实现类似Selenium的点击按钮、复制粘贴操作?
类Selenium交互功能的Python轻量实现方案
requests是纯HTTP请求库,仅能收发网络请求,不支持JS渲染、DOM操作这类浏览器层面的交互,所以无法直接模拟按钮点击、复制粘贴行为,以下是两种可行的替代方案,运行效率远高于Selenium:
方案1:抓包逆向接口,纯requests实现交互
- 核心逻辑:前端按钮点击、提交操作本质上都是向服务端发送特定的HTTP请求,你可以通过浏览器F12开发者工具的「网络」面板,捕获点击操作对应的请求URL、请求头、参数、请求体内容,直接用requests模拟发送即可,完全没有浏览器层面的开销,速度最快。
- 适用场景:接口无复杂加密、交互逻辑简单的站点
- 示例代码:
import requests # 填入抓包获取的请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Cookie": "抓包获取的有效Cookie", "Referer": "抓包获取的来源页地址" } # 填入抓包获取的请求参数,对应你要粘贴提交的内容 post_data = { "content": "需要提交的内容" } # 模拟点击提交按钮的请求 response = requests.post("https://example.com/submit", headers=headers, data=post_data) # 打印返回结果,对应点击后要复制的内容 print(response.json())
- 优缺点:执行速度最快,资源占用极低;缺点是需要人工分析接口,遇到JS加密签名的参数时,需要额外逆向JS逻辑。
方案2:轻量无头浏览器工具实现交互
如果站点接口加密复杂,逆向成本高,可以用比Selenium更轻量的无头浏览器工具,支持完整的DOM交互,启动速度、执行效率比Selenium高30%以上:
子方案2.1:requests-html(语法接近requests,学习成本低)
requests-html是requests官方作者开发的库,内置Chromium无头渲染能力,支持基础的点击、输入、元素取值操作:
from requests_html import HTMLSession session = HTMLSession() resp = session.get("https://example.com") # 渲染页面JS resp.html.render() # 模拟点击按钮 submit_btn = resp.html.find("#submit-button", first=True) submit_btn.click() # 获取元素文本(对应复制操作) copy_content = resp.html.find("#result-text", first=True).text # 输入内容到文本框(对应粘贴操作) input_box = resp.html.find("#input-area", first=True) input_box.fill(copy_content)
子方案2.2:Playwright无头模式(交互能力强,执行效率高)
Playwright是微软推出的浏览器自动化工具,默认支持无头模式,内置自动等待逻辑,无需手动写休眠等待,执行效率远高于Selenium:
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 启动无头Chromium,headless参数默认为True,调试时可以改成False显示界面 browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto("https://example.com") # 模拟点击按钮 page.click("#submit-button") # 获取元素文本(对应复制操作) copy_content = page.locator("#result-text").text_content() # 输入内容到文本框(对应粘贴操作) page.fill("#input-area", copy_content) browser.close()
- 优缺点:无需分析接口,支持所有复杂JS交互场景,比Selenium快很多;缺点是执行速度略低于纯requests方案。
附加:剪贴板操作工具
如果你需要和系统剪贴板交互,可以用pyperclip库实现复制粘贴:
import pyperclip # 写入内容到系统剪贴板(复制) pyperclip.copy("需要复制的内容") # 读取系统剪贴板内容(粘贴) paste_content = pyperclip.paste()
内容的提问来源于stack exchange,提问作者yeji
相关产品推荐
相关产品推荐

