google浏览器保留页面跳转之前的请求记录

场景:

浏览器F12分析页面请求接口过程中,常常会遇到页面跳转到了新的页面,原先页面的请求接口看不到了

解决办法:Preserve log配置,字面意思保留日志

开启

开启这个配置后,发现,即使页面跳转了,之前所有页面的请求都会在下面保留,不会随着页面跳转而清楚了,解决。 

<think>我们面对的任务是:使用Chrome调试协议(通过端口9222)控制浏览器实现网页跳转。 根据引用[1],我们已经知道如何启动一个开启调试端口的Chrome实例: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir=./tmp 接下来,我们需要使用Chrome调试协议(也称为Chrome DevTools Protocol, CDP)来发送命令。我们可以通过WebSocket连接到这个调试端口,然后发送相应的命令。 步骤: 1. 启动Chrome浏览器,指定调试端口和用户数据目录(如上述命令)。 2. 获取可用的调试目标(即打开的页面或标签页)。我们可以通过访问`http://localhost:9222/json`来获取所有可用的目标列表。 3. 从目标列表中选择我们想要控制的标签页(通常是一个WebSocket URL)。 4. 通过WebSocket连接到该URL,然后发送CDP命令。 具体到网页跳转,我们需要使用`Page.navigate`命令。 但是,由于我们可能使用编程方式,这里提供一个使用Python的示例(因为引用中提到了Selenium,但用户要求使用调试协议,所以使用Selenium,而是直接使用CDP)。 我们可以使用`websockets`库(需要安装)来连接,或者使用`requests`获取目标列表,然后使用其他WebSocket客户端。 然而,有一个更简单的方式:使用`pychrome`库(一个Chrome调试协议的Python客户端)或者`selenium`的底层方式。但用户要求通过调试协议,所以我们将直接使用WebSocket。 但是,由于CDP命令是JSON格式,我们需要按照协议发送。这里我们以Python为例,使用`websockets`库来实现。 注意:首先确保安装了`websockets`库,如果没有,可以通过`pip install websockets`安装。 步骤详细说明: 1. 启动Chrome(如上述命令),假设它已经在运行。 2. 通过HTTP获取目标列表: 发送GET请求到:http://localhost:9222/json 返回的是一个JSON数组,每个元素是一个目标的信息,其中包含`webSocketDebuggerUrl`字段,这就是我们需要的WebSocket地址。 3. 选择一个目标(通常是第一个,或者根据标题等选择),获取其`webSocketDebuggerUrl`。 4. 使用WebSocket连接到这个URL。 5. 发送`Page.navigate`命令。注意,我们需要按照CDP的格式发送消息,每个消息有一个id,方法名和参数。 例如,跳转到"https://example.com"的命令如下: { "id": 1, // 自增的整数,用于匹配响应 "method": "Page.navigate", "params": { "url": "https://example.com" } } 6. 我们可能还需要先启用Page域(因为默认可能未启用)。所以,在发送navigate命令前,先发送`Page.enable`命令。 因此,完整的步骤是: - 发送 `Page.enable` 命令(id=1) - 发送 `Page.navigate` 命令(id=2) 7. 接收并处理响应(可选,如果需要确认跳转是否成功)。 下面是一个简单的Python代码示例: ```python import asyncio import websockets import json import requests # 首先获取目标列表 response = requests.get('http://localhost:9222/json') targets = response.json() # 假设我们选择第一个目标 target = targets[0] ws_url = target['webSocketDebuggerUrl'] async def run(): async with websockets.connect(ws_url) as websocket: # 启用Page域 enable_command = { "id": 1, "method": "Page.enable" } await websocket.send(json.dumps(enable_command)) # 等待启用响应(可选) response = await websocket.recv() print("Enable response:", response) # 导航到指定URL navigate_command = { "id": 2, "method": "Page.navigate", "params": { "url": "https://example.com" } } await websocket.send(json.dumps(navigate_command)) # 等待导航响应 response = await websocket.recv() print("Navigate response:", response) asyncio.get_event_loop().run_until_complete(run()) ``` 注意:在实际使用中,可能需要处理多个响应,因为CDP可能会发送多个事件(比如页面加载事件)。上面的代码只是简单示例。 另外,如果浏览器还没有打开任何页面,那么目标列表可能是空的。在这种情况下,我们可以先创建一个新页面。创建新页面的命令可以通过HTTP请求实现: POST http://localhost:9222/json/new 参数:?url=about:blank (然后就会打开一个空白页,然后再用上面的方法获取其WebSocket URL) 或者,在启动浏览器时,可以直接打开一个初始页面,例如在启动命令后加上URL参数: ... --remote-debugging-port=9222 --user-data-dir=./tmp https://example.com 这样,目标列表中就会有一个页面。 总结:通过以上步骤,我们就可以通过Chrome调试协议控制浏览器跳转网页。 引用说明: [^1] 提供了启动调试端口的方法。 [^2] 提到了复用浏览器实例,但这里我们直接使用CDP,所以没有使用Selenium。 [^3][^4] 是关于Chrome调试的其他技巧,但与本问题关系大。 因此,我们按照上述步骤即可实现。 注意:在实际编程中,需要处理异常和错误情况,例如连接失败、目标存在等。 相关问题: 1. 如何通过Chrome调试协议获取当前页面的HTML内容? 2. 除了网页跳转,Chrome调试协议还能实现哪些常见的页面操作? 3. 在浏览器启动后,如何动态打开新的标签页并控制它? 4. 如何处理网页跳转过程中可能出现的弹窗或认证请求?</think>### 如何使用 Chrome 调试协议控制网页跳转 以下是使用 Chrome 调试协议通过端口控制浏览器实现网页跳转的完整步骤: #### 1. **启动调试模式浏览器** 首先启动带调试端口的 Chrome 浏览器(以 macOS 为例): ```bash /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --remote-debugging-port=9222 \ --user-data-dir=./tmp ``` Windows 系统替换为 Chrome 安装路径即可[^1]。 #### 2. **获取调试目标** 访问调试接口获取 WebSocket 连接地址: ```bash curl http://localhost:9222/json ``` 返回结果示例: ```json [{ "id": "AAABBBCCC", "title": "Chrome调试页", "url": "about:blank", "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/AAABBBCCC" }] ``` #### 3. **建立 WebSocket 连接** 使用 `Page.navigate` 命令控制跳转(Python 示例): ```python import websockets import json async def navigate(url): async with websockets.connect("ws://localhost:9222/devtools/page/AAABBBCCC") as ws: # 启用Page域 await ws.send(json.dumps({ "id": 1, "method": "Page.enable" })) # 发送跳转命令 await ws.send(json.dumps({ "id": 2, "method": "Page.navigate", "params": {"url": url} })) print(await ws.recv()) # 接收响应 asyncio.get_event_loop().run_until_complete(navigate("https://example.com")) ``` #### 4. **关键协议命令** - 跳转到新 URL:`Page.navigate` - 后退/前进:`Page.goBack` / `Page.goForward` - 重载页面:`Page.reload` #### 5. **调试技巧** - 复用浏览器实例:直接连接已打开的浏览器,避免重复登录[^2] - 查看跳转过程:在 DevTools 的 Network 面板监控请求 - 处理跨域限制:注意 `Referrer-Policy` 等安全策略的影响[^3] #### 6. **完整流程示意图 ```mermaid graph LR A[启动调试端口] --> B[获取WebSocket URL] B --> C[建立WebSocket连接] C --> D[发送Page.navigate命令] D --> E[浏览器执行页面跳转] ``` #### 注意事项 1. 首次连接需先发送 `Page.enable` 激活页面控制功能 2. 跳转结果可通过 `Page.frameNavigated` 事件监听 3. 需处理 SSL 证书错误等安全拦截 4. 多标签页场景需先通过 `Target.attachToTarget` 绑定具体页面 通过以上步骤,即可实现程序化控制浏览器导航行为。实际应用中可结合 Puppeteer 或 Selenium 等工具简化流程[^2][^4]。 --- ### 相关问题 1. **如何通过 Chrome 调试协议获取当前页面的 DOM 结构?** (提示:使用 `DOM.getDocument` 命令) 2. **调试协议中如何处理页面跳转时的身份认证弹窗?** (提示:监听 `Auth.required` 事件并回复凭证) 3. **除了网页跳转,Chrome 调试协议还能实现哪些自动化操作?** (提示:表单填写、截图、网络请求拦截等) 4. **如何通过调试协议模拟移动端设备访问网页?** (提示:使用 `Emulation.setDeviceMetricsOverride` 命令) [^1]: 启动调试端口命令参考 [^2]: 浏览器实例复用原理 [^3]: 跨域请求的安全策略限制 [^4]: Chrome 调试协议命令手册
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值