【Python】解决运行selenium调用chrome浏览器,监听端口被占用的方法

最近,我在获取网址登陆的过程中,遇到了下面的问题:

"Found process 12372 - chrome.exe listening on port 10222"

当您遇到这个问题, 这通常意味着Google Chrome浏览器的某个实例正在监听端口10222。

这可能是由于Chrome的远程调试功能或者某些扩展程序导致的。

我的原代码的部分:

python 复制代码
driver_flag = find_and_kill_process_by_port(10222) #查找并终止占用特定端口的进程,为后面使用

if driver_flag is False:
    # 创建Chrome参数对象
    command_word = r"D:\XXX\Google\chrome.exe --remote-debugging-port=10222 --user-data-dir=\"C:\selenum\AutomationProfile\""
    Popen(command_word)
    time.sleep(2)
    pyautogui.press('enter')

    # 传入浏览设置与浏览器并接管CMD开启的 GOOGLE_CHROME 浏览器
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8')
    chrome_driver = r"D:\XXX\Google\chromedriver.exe"
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:10222")

    # 创建Chrome浏览器对象并传入参数
    driver = webdriver.Chrome(executable_path=chrome_driver, options=chrome_options)
    # 执行Chrome开发者协议命令(在加载页面时执行指定的JavaScript代码)
    driver.execute_cdp_cmd(
        'Page.addScriptToEvaluateOnNewDocument',
        {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'}
    )
    self.driver = driver

if self.driver is None:
    # driver = self.driver
    chrome_driver = r"D:\XXX\Google\chromedriver.exe"
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:10222")

    # 创建Chrome浏览器对象并传入参数
    driver = webdriver.Chrome(executable_path=chrome_driver, options=chrome_options)
    self.driver = driver

由于我使用的是 chrome_options.add_experimental_option 来运行driver驱动器的使用,

其好处是可以通过 add_experimental_option 方法设置 Chrome 的用户偏好设置,例如禁用弹窗、设置默认内容设置值等。

然而,这种方法带来的副作用是,因为调用了10222的接口,占用到电脑的端口的运行,所以会报错。

以下是几种解决这个问题的方法:

1. 检查Chrome的远程调试端口:

由于我们使用Selenium)时遇到这个问题,可能是因为Chrome被配置为远程调试模式。

可以关闭所有Chrome实例,然后重新以非调试模式启动Chrome。

但是如果是需要使用远程调试功能的话,确保您使用的端口没有被其他进程占用。

2. 检查并关闭相关进程:

可以使用任务管理器或命令行工具(如tasklist和taskkill)来查看是否有其他进程占用了端口10222。

如果有,你就可以结束该进程。

同时,您可以使用netstat -ano | findstr "10222"命令来查找监听该端口的进程ID,然后使用taskkill /pid <PID> /f 的命令来强制结束该进程。

3. 禁用自动化检测提示

使用 add_experimental_option 方法隐藏"Chrome 正在自动化测试"提示,可以通过添加以下代码实现:

python 复制代码
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])

这可以防止Chrome显示自动化测试的提示,从而减少远程调试功能带来的问题 。

(当然,个人用了,没啥效果)

相关推荐
Owen_Q12 分钟前
Denso Create Programming Contest 2025(AtCoder Beginner Contest 413)
开发语言·算法·职场和发展
·云扬·29 分钟前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
liulilittle1 小时前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
巴里巴气1 小时前
selenium基础知识 和 模拟登录selenium版本
爬虫·python·selenium·爬虫模拟登录
19891 小时前
【零基础学AI】第26讲:循环神经网络(RNN)与LSTM - 文本生成
人工智能·python·rnn·神经网络·机器学习·tensorflow·lstm
JavaEdge在掘金1 小时前
Redis 数据倾斜?别慌!从成因到解决方案,一文帮你搞定
python
ansurfen2 小时前
我的第一个AI项目:从零搭建RAG知识库的踩坑之旅
python·llm
Thomas_YXQ2 小时前
Unity URP法线贴图实现教程
开发语言·unity·性能优化·游戏引擎·unity3d·贴图·单一职责原则
前端付豪2 小时前
20、用 Python + API 打造终端天气预报工具(支持城市查询、天气图标、美化输出🧊
后端·python
前端付豪2 小时前
19、用 Python + OpenAI 构建一个命令行 AI 问答助手
后端·python