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

一、连接不上

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

1. Chrome 实例关闭

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

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

from selenium import webdriverchrome_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 处于异常状态,从而无法再次连接调试器。
  • 解决办法:在代码中确保在调试结束后正确关闭浏览器会话。例如:
from selenium import webdriverchrome_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       13588TCP    127.0.0.1:9222         127.0.0.1:58148        ESTABLISHED     13588TCP    127.0.0.1:9222         127.0.0.1:58149        ESTABLISHED     13588TCP    127.0.0.1:58148        127.0.0.1:9222         ESTABLISHED     19784TCP    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 的进程,然后右键选择“结束任务”。
  • 使用命令行结束进程:以管理员身份运行命令提示符,执行以下命令结束进程:
taskkill /F /PID 13588
taskkill /F /PID 19784
2. 代码中未正确释放资源

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

from selenium import webdriverchrome_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 端口:
chrome.exe --remote-debugging-port=9223
  • 修改代码中的调试地址
from selenium import webdriverchrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9223")
driver = webdriver.Chrome(options=chrome_options)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37204.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「清华大学、北京大学」DeepSeek 课件PPT专栏

你要的 这里都打包好啦&#xff0c;快快收藏起来&#xff01; 名称 链接 团队简介 类型 DeepSeek——从入门到精通 1️⃣ DeepSeek从入门到精通「清华团队」 清华大学新闻与传播学院 新媒体研究中心 元宇宙文化实验室 PPT课件 DeepSeek如何赋能职场应用? ——从提示语…

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【WSL 】--- Windows11 迁移 WSL 超详细指南 —— 给室友换一个宿舍! 开发环境一、引…

【图像处理基石】什么是HDR图片?

1. 什么是HDR图片&#xff1f; HDR&#xff08;高动态范围图像&#xff0c;High Dynamic Range&#xff09;是一种通过技术手段扩展照片明暗细节的成像方式。以下是关于HDR的详细说明&#xff1a; 核心原理 动态范围&#xff1a;指图像中最亮和最暗区域之间的亮度差。人眼能…

HarmonyOS Next中的弹出框使用

HarmonyOS Next弹出框概述及分类 弹出框是一种模态窗口&#xff0c;通常用于在保持当前上下文环境的同时&#xff0c;临时展示用户需关注的信息或待处理的操作。用户需在模态弹出框内完成相关交互任务之后&#xff0c;才能退出模态模式。弹出框可以不与任何组件绑定&#xff0…

Java多线程与高并发专题——为何每次用完 ThreadLocal 都要调用 remove()?

什么是内存泄漏 首先&#xff0c;我们要知道这个事情和内存泄漏有关&#xff0c;所以就让我们先来看一下什么是内存泄漏。 内存泄漏指的是&#xff0c;当某一个对象不再有用的时候&#xff0c;占用的内存却不能被回收&#xff0c;这就叫作内存泄漏。 因为通常情况下&#xf…

视频推拉流EasyDSS点播平台云端录像播放异常的问题排查与解决

视频推拉流EasyDSS视频直播点播平台可提供一站式的视频转码、点播、直播、视频推拉流、播放H.265视频等服务&#xff0c;搭配RTMP高清摄像头使用&#xff0c;可将无人机设备的实时流推送到平台上&#xff0c;实现无人机视频推流直播、巡检等应用。 有用户反馈&#xff0c;项目现…

《笔记》Android 获取第三方应用及查看应用信息、apk大小、缓存、存储,以及第三方清除缓存

获取应用相关信息&#xff1a; PS:manifest标签中设置以下属性表示系统应用 android:process"system" android:sharedUserId"android.uid.system" //获取所有应用&#xff08;非系统apk&#xff0c;有些应用获取不到&#xff09; List<ApplicationInf…

【保姆级教程】Windows系统+ollama+Docker+Anythingllm部署deepseek本地知识库问答大模型,可局域网多用户访问

目录 1.Ollama 本地化部署 DeepSeek R1 1.1下载Ollama 1.2安装Ollama 1.3安装DeepSeek R1大模型 2.系统环境配置 2.1开启系统功能 2.2安装wsl 3.安装 Docker Desktop并拉取Anythingllm镜像 3.1从 Docker 官网 下载并安装。 3.2拉取镜像 3.3运行 Docker 命令 4.anyth…

Sensodrive机器人力控关节模组SensoJoint在海洋垃圾清理机器人中的拓展应用

海洋污染已成为全球性的环境挑战&#xff0c;其中海底垃圾的清理尤为困难。据研究&#xff0c;海洋中约有2600万至6600万吨垃圾&#xff0c;超过90%沉积在海底。传统上&#xff0c;潜水员收集海底垃圾不仅成本高昂&#xff0c;而且充满风险。为解决这一问题&#xff0c;欧盟资助…

【redis】AOF 的基本工作机制,顺序写入,文件同步,重写机制

RDB 最大的问题&#xff0c;就是不能实时的持久化保存数据&#xff0c;在两次生成快照之间&#xff0c;实时的数据可能会随着重启而丢失 基本工作机制 AOF&#xff1a;append only file&#xff0c;类似于 MySQL 的 binlog&#xff0c;会把每个用户的每个操作&#xff0c;都记…

【C++】动态规划从入门到精通

一、动态规划基础概念详解 什么是动态规划 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是一种通过将复杂问题分解为重叠子问题&#xff0c;并存储子问题解以避免重复计算的优化算法。它适用于具有以下两个关键性质的问题&#xff1a; 最优子结构&…

数据可视化(matplotlib)-------辅助图标的设置

目录 一、认识图表常用的辅助元素 坐标轴 二、设置坐标轴的标签、刻度范围和刻度标签 &#xff08;一&#xff09;、设置坐标轴的标签 1、xlabel()------设置x轴标签 2、ylabel()------设置y轴标签 &#xff08;二) 、设置刻度范围和刻度标签 1、xlim()和ylim()函数分别可…

CSS 用于图片的样式属性

CSS 设置图像样式 CSS中用于图片的样式属性主要包括以下几个方面&#xff1a; ‌边框和背景‌&#xff1a; ‌border‌&#xff1a;可以设置图片的边框样式、宽度和颜色。例如&#xff0c;img { border: 1px solid #ddd; } 会给图片添加1像素的实线边框&#xff0c;颜色为灰色…

Redis解决缓存击穿问题——两种方法

目录 引言 解决办法 互斥锁&#xff08;强一致&#xff0c;性能差&#xff09; 逻辑过期&#xff08;高可用&#xff0c;性能优&#xff09; 设计逻辑过期时间 引言 缓存击穿&#xff1a;给某一个key设置了过期时间&#xff0c;当key过期的时候&#xff0c;恰好这个时间点对…

Object 转 JSONObject 并排除null和““字符串

public static JSONObject objToJSONObject(Object obj) throws Exception{//创建一个 HashMap 对象 map&#xff0c;用于存储对象的属性名和属性值。//key 是属性名&#xff08;String 类型&#xff09;&#xff0c;value 是属性值&#xff08;Object 类型&#xff09;Map<…

python实现接口自动化

代码实现自动化相关理论 代码编写脚本和工具实现脚本区别是啥? 代码&#xff1a; 优点&#xff1a;代码灵活方便缺点&#xff1a;学习成本高 工具&#xff1a; 优点&#xff1a;易上手缺点&#xff1a;灵活度低&#xff0c;有局限性。 总结&#xff1a; 功能脚本&#xff1a;工…

C++特性——RAII、智能指针

RAII 就像new一个需要delete&#xff0c;fopen之后需要fclose&#xff0c;但这样会有隐形问题&#xff08;忘记释放&#xff09;。RAII即用对象把这个过程给包起来&#xff0c;对象构造的时候&#xff0c;new或者fopen&#xff0c;析构的时候delete. 为什么需要智能指针 对于…

算法系列——有监督学习——4.支持向量机

一、概述 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种应用范围非常广泛的算法&#xff0c;既可以用于分类&#xff0c;也可以用于回归。 本文将介绍如何将线性支持向量机应用于二元分类问题&#xff0c;以间隔&#xff08;margin&#x…

网络安全之前端学习(HTML篇)

前言&#xff1a;网络安全中有一个漏洞叫xss漏洞&#xff0c;就是利用网页引发弹窗&#xff0c;这就要求我们看得懂源码&#xff0c;所以我会持续更新前端学习&#xff0c;可以不精通&#xff0c;但是一定要会&#xff0c;主要掌握HTML&#xff0c;css&#xff0c;js这三项技术…

大华HTTP协议在智联视频超融合平台中的接入方法

一. 大华HTTP协议介绍 大华HTTP协议是大华股份&#xff08;Dahua Technology&#xff09;为其安防监控设备开发的一套基于HTTP/HTTPS的通信协议&#xff0c;主要用于设备与客户端&#xff08;如PC、手机、服务器&#xff09;之间的数据交互。该协议支持设备管理、视频流获取、…