You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Selenium脚本运行时随时通过输入暂停并恢复?

实现Selenium脚本的随时暂停/恢复功能

要实现随时按回车键暂停/恢复Selenium脚本的需求,核心思路是通过多线程分离任务执行与键盘监听:一个线程负责WebDriver的业务操作,另一个线程专门监听回车键,通过线程同步事件(threading.Event)控制任务的暂停与恢复。

步骤1:安装依赖库

需要用到keyboard库来监听键盘事件,在Anaconda Prompt中执行:

pip install keyboard

步骤2:完整代码示例

import threading
import time
from selenium import webdriver
import keyboard

# 创建线程事件,用于控制暂停/恢复
pause_event = threading.Event()

def listen_for_pause_toggle():
    """监听回车键,切换暂停/恢复状态"""
    while True:
        # 等待回车键按下
        keyboard.wait('enter')
        if pause_event.is_set():
            # 当前是运行状态,切换为暂停
            pause_event.clear()
            print("\n脚本已暂停,按回车键恢复")
        else:
            # 当前是暂停状态,切换为运行
            pause_event.set()
            print("\n脚本已恢复")

def run_selenium_operations():
    """执行Selenium业务逻辑"""
    driver = webdriver.Chrome()
    try:
        driver.get("https://www.example.com")
        print("脚本启动,按回车键暂停")
        
        # 示例:循环执行操作,替换为你的实际业务逻辑
        while True:
            # 等待恢复信号(如果处于暂停状态会阻塞)
            pause_event.wait()
            
            # --------------------------
            # 这里写你的Selenium操作代码
            print(f"当前页面标题: {driver.title}")
            # 示例操作:刷新页面
            driver.refresh()
            # --------------------------
            
            time.sleep(2)  # 模拟操作间隔,可根据实际调整
    finally:
        driver.quit()
        print("WebDriver已关闭")

if __name__ == "__main__":
    # 初始设置为允许运行状态
    pause_event.set()
    
    # 启动键盘监听线程(守护线程,随主线程退出)
    listener_thread = threading.Thread(target=listen_for_pause_toggle, daemon=True)
    listener_thread.start()
    
    # 启动Selenium任务线程
    selenium_thread = threading.Thread(target=run_selenium_operations)
    selenium_thread.start()
    selenium_thread.join()

关键说明

  • pause_event.set()表示允许任务执行,pause_event.clear()表示暂停任务,pause_event.wait()会阻塞线程直到事件被设置
  • 键盘监听线程设为守护线程,当Selenium任务线程结束时,监听线程会自动退出
  • 运行脚本时,确保Anaconda Prompt处于前台,否则键盘输入可能无法被捕获
  • 你需要将示例中的Selenium操作(如刷新页面)替换为自己的业务逻辑,只要在循环中加入pause_event.wait(),就能实现每次操作前检查是否需要暂停

内容的提问来源于stack exchange,提问作者kalmykov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:10:43