#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 修复 Chrome 调试连接问题 自动检测并处理 Chrome 调试模式连接 """ import socket import subprocess import time from loguru import logger def check_chrome_debug_port(host="127.0.0.1", port=5003): """检查 Chrome 调试端口是否可用""" try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(2) result = sock.connect_ex((host, port)) sock.close() return result == 0 except Exception as e: logger.error(f"检查端口 {host}:{port} 失败: {e}") return False def start_chrome_debug_mode(port=5003, user_data_dir="C:\\temp\\chrome_debug"): """启动 Chrome 调试模式""" try: logger.info(f"正在启动 Chrome 调试模式,端口: {port}") # Chrome 可执行文件路径(Windows) chrome_paths = [ r"C:\Program Files\Google\Chrome\Application\chrome.exe", r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" ] chrome_exe = None for path in chrome_paths: try: subprocess.run([path, "--version"], capture_output=True, check=True) chrome_exe = path logger.info(f"找到 Chrome 可执行文件: {path}") break except: continue if not chrome_exe: logger.error("未找到 Chrome 可执行文件") return False # 启动 Chrome 调试模式 cmd = [ chrome_exe, f"--remote-debugging-port={port}", f"--user-data-dir={user_data_dir}", "--no-first-run", "--no-default-browser-check" ] logger.info(f"启动命令: {' '.join(cmd)}") process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 等待 Chrome 启动 time.sleep(5) # 检查端口是否可用 if check_chrome_debug_port(port=port): logger.success("Chrome 调试模式启动成功") return True else: logger.error("Chrome 调试模式启动失败") process.terminate() return False except Exception as e: logger.error(f"启动 Chrome 调试模式失败: {e}") return False def main(): """主函数""" logger.info("=== Chrome 调试模式检查与修复 ===") # 检查当前端口状态 if check_chrome_debug_port(): logger.success("Chrome 调试端口 127.0.0.1:5003 已可用") logger.info("您现在可以运行: python product/new_data.py") return True else: logger.warning("Chrome 调试端口 127.0.0.1:5003 不可用") # 询问用户是否要启动 Chrome 调试模式 logger.info("检测到 Chrome 调试模式未启动") logger.info("建议使用以下替代方案:") logger.info("1. 使用 Playwright 版本 (推荐): python product/new_data_stealth.py") logger.info("2. 手动启动 Chrome 调试模式") logger.info("3. 自动启动 Chrome 调试模式") choice = input("请选择方案 (1/2/3, 默认1): ").strip() or "1" if choice == "1": logger.info("使用 Playwright 版本...") logger.info("运行: python product/new_data_stealth.py") return True elif choice == "2": logger.info("请手动运行以下命令:") logger.info('chrome.exe --remote-debugging-port=5003 --user-data-dir="C:\\temp\\chrome_debug"') return False elif choice == "3": if start_chrome_debug_mode(): logger.success("Chrome 调试模式启动成功") logger.info("您现在可以运行: python product/new_data.py") return True else: logger.error("自动启动失败,请尝试手动启动") return False else: logger.error("无效选择") return False if __name__ == "__main__": success = main() if success: logger.info("修复完成") else: logger.error("修复失败,请检查上述信息")