Chrome 调试器第二次连接不上?

一、连接不上

当使用 chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") 连接 Chrome 调试器时,调试一次后就连不上,可能由以下几种原因导致:

1. Chrome 实例关闭

  • 原因 :在调试过程结束后,如果 Chrome 实例被意外关闭,那么监听在 127.0.0.1:9222 端口的调试服务也会随之停止。当下次再尝试连接该端口时,由于没有服务在监听,就会连接失败。
  • 解决办法:确保在每次调试前,Chrome 实例已经正确启动并开启了远程调试模式。可以使用以下命令启动 Chrome 并开启远程调试:
bash 复制代码
# Windows
chrome.exe --remote-debugging-port=9222

# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

# Linux
google-chrome --remote-debugging-port=9222

2. 端口被占用

  • 原因 :可能在调试过程中,其他程序占用了 9222 端口,导致 Chrome 无法继续监听该端口。或者在 Chrome 关闭后,该端口没有被正确释放。
  • 解决办法
    • 检查端口占用情况
      • Windows :使用 netstat -ano | findstr :9222 命令查看占用 9222 端口的进程 ID。
      • macOS/Linux :使用 lsof -i :9222 命令查看占用 9222 端口的进程信息。
    • 释放端口 :根据查找到的进程 ID,结束相应的进程。在 Windows 中可以使用 taskkill /F /PID <进程 ID> 命令;在 macOS/Linux 中可以使用 kill -9 <进程 ID> 命令。
    • 更改端口 :如果 9222 端口经常被占用,可以尝试更改 Chrome 的远程调试端口,例如使用 9223 端口:
bash 复制代码
# 以 Windows 为例
chrome.exe --remote-debugging-port=9223

同时,在代码中也要相应地修改调试地址:

python 复制代码
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9223")
driver = webdriver.Chrome(options=chrome_options)

3. 浏览器版本与驱动不兼容

  • 原因:如果 Chrome 浏览器版本和 ChromeDriver 版本不兼容,可能会导致连接调试器时出现问题,甚至在调试一次后就无法再次连接。
  • 解决办法 :确保 Chrome 浏览器和 ChromeDriver 版本兼容。可以通过以下步骤更新 ChromeDriver:
    1. 查看 Chrome 浏览器的版本号:在 Chrome 浏览器的地址栏输入 chrome://settings/help,即可查看当前 Chrome 版本。
    2. 下载对应版本的 ChromeDriver:访问 ChromeDriver 官方下载页面,下载与 Chrome 版本对应的 ChromeDriver。
    3. 替换旧的 ChromeDriver:将下载的 ChromeDriver 替换掉原来的 ChromeDriver 可执行文件。

4. 代码中未正确处理浏览器会话

  • 原因:如果代码中在调试结束后没有正确关闭浏览器会话,可能会导致 Chrome 处于异常状态,从而无法再次连接调试器。
  • 解决办法:在代码中确保在调试结束后正确关闭浏览器会话。例如:
python 复制代码
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=chrome_options)

try:
    # 进行调试操作
    driver.get("https://www.example.com")
finally:
    # 确保在调试结束后关闭浏览器会话
    driver.quit()

二、端口查看

netstat -ano | findstr :9222

复制代码
  TCP    127.0.0.1:9222         0.0.0.0:0              LISTENING       13588
  TCP    127.0.0.1:9222         127.0.0.1:58148        ESTABLISHED     13588
  TCP    127.0.0.1:9222         127.0.0.1:58149        ESTABLISHED     13588
  TCP    127.0.0.1:58148        127.0.0.1:9222         ESTABLISHED     19784
  TCP    127.0.0.1:58149        127.0.0.1:9222         ESTABLISHED     19784

三、解决

从你执行 netstat -ano | findstr :9222 命令得到的输出结果来看,端口 9222 确实被占用了,有多个与该端口相关的连接处于 ESTABLISHED(已建立连接)状态,下面为你分析具体情况以及对应的解决办法。

分析输出结果

  • 进程 13588 :它正在监听 127.0.0.1:9222 端口(LISTENING 状态),并且与 127.0.0.1:58148127.0.0.1:58149 建立了连接(ESTABLISHED 状态)。这个进程很可能是正在运行的 Chrome 实例。
  • 进程 19784 :它与 127.0.0.1:9222 建立了两个连接(ESTABLISHED 状态),可能是你的 Python 脚本或者其他程序尝试连接到 Chrome 的调试端口。

可能的问题及解决办法

1. Chrome 实例未正常关闭

如果 Chrome 实例没有正常关闭,就会一直占用 9222 端口。你可以尝试手动结束相关进程。

  • 结束进程 :打开任务管理器,切换到"详细信息"选项卡,找到进程 ID 为 1358819784 的进程,然后右键选择"结束任务"。
  • 使用命令行结束进程:以管理员身份运行命令提示符,执行以下命令结束进程:
batch 复制代码
taskkill /F /PID 13588
taskkill /F /PID 19784
2. 代码中未正确释放资源

如果你的 Python 脚本在结束时没有正确关闭浏览器会话,会导致 Chrome 实例一直运行。确保在代码中使用 driver.quit() 来关闭浏览器会话,示例代码如下:

python 复制代码
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=chrome_options)

try:
    # 进行调试操作
    driver.get("https://www.example.com")
finally:
    # 确保在调试结束后关闭浏览器会话
    driver.quit()
3. 更改端口

如果 9222 端口一直被占用,你可以尝试更改 Chrome 的远程调试端口。

  • 启动 Chrome 并指定新端口 :在命令提示符中执行以下命令启动 Chrome 并使用 9223 端口:
batch 复制代码
chrome.exe --remote-debugging-port=9223
  • 修改代码中的调试地址
python 复制代码
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9223")
driver = webdriver.Chrome(options=chrome_options)

完成上述操作后,再次尝试连接调试器,应该就能正常连接了。

相关推荐
waterHBO17 小时前
修改 vscode 左侧导航栏的文字大小 (更新版)
ide·chrome·vscode·编辑器
鱼与宇17 小时前
WebSphere(WAS)
前端·chrome
梓䈑18 小时前
【Linux系统】命令行参数 和 环境变量(含内建命令介绍)
linux·运维·chrome
zhangzhiwei-zzw2 天前
Linux下使用nmcli连接网络
linux·网络·chrome
老K(郭云开)2 天前
allWebPlugin中间件VLC专用版之截图功能介绍
前端·javascript·chrome·中间件·edge
轻颂呀2 天前
进程——环境变量及程序地址空间
前端·chrome
珊珊而川3 天前
使用source ~/.bashrc修改环境变量之后,关闭服务器,在重启,环境变量还有吗?
服务器·chrome·github
试音刀郎3 天前
shell完整版教程
前端·chrome
诚丞成4 天前
苍茫命令行:linux模拟实现,书写微型bash
linux·chrome·bash
老K(郭云开)4 天前
allWebPlugin中间件VLC专用版之录像功能介绍
前端·javascript·chrome·中间件·edge