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)

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

相关推荐
守城小轩15 小时前
Chromium 134 编译指南 macOS篇:安装 Xcode(二)
chrome·chrome devtools·指纹浏览器·浏览器开发·超级浏览器
天神下凡_15 小时前
开发助手:浏览器插件-沉浸式翻译
前端·chrome
nui11117 小时前
汽配快车道解决chrome backgroud.js(Service Worker) XMLHttpRequest is not defined问题
前端·javascript·chrome
小度爱学习1 天前
linux中的执行命令格式及命令帮助
linux·运维·chrome
守城小轩1 天前
Chromium 134 编译指南 macOS篇:系统环境准备(一)
chrome·chrome devtools·指纹浏览器·浏览器开发·超级浏览器
小白学大数据1 天前
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
开发语言·chrome·爬虫·selenium·scrapy
猿大师播放器2 天前
如何在新版谷歌Chrome上加载IE的Activex/OCX控件?
前端·chrome·web
Good Lucky2 天前
Skyline配置指南-微信小程序
chrome·微信小程序·小程序·skyline
可乐LENG3 天前
【CS*N是狗】亲测可用!!WIN11上禁用Chrome自动更新IDM插件
chrome·idm·idm插件
BabyShell3 天前
浏览器插件开发-创建自己的启动页
前端·chrome