gpt4 book ai didi

selenium - 如何在 Selenium 中使用 Chrome DevTools 协议(protocol)(使用 Python)来捕获 HTTP 请求和响应?

转载 作者:行者123 更新时间:2023-12-04 12:25:00 43 4
gpt4 key购买 nike

我知道Fetch Domain用于此目的,但我不知道如何实现它。在Selenium python中,我使用以下代码来启用requestPaused的发布事件。

driver.execute_cdp_cmd("Fetch.enable",{})
driver.get('https://www.example.com')

但是不知道怎么处理 requestPaused事件(我需要调用一个 fulfillRequestcontinueRequest/ continueWithAuth )。结果,我的程序停止工作。
如果有人能给我一个例子来帮助我理解它是如何工作的,我真的很感激。

最佳答案

,你没看错。

根据 Selenium v​​4.0.0-alpha-3 的发行说明:

* Expose devtools APIs from chromium derived drivers.
* Expose presence of devtools support on a role-based interface

根据 Selenium v​​4.0.0.0-alpha-1 的发行说明:
* Basic support for CDP landed via the "DevTools" interface.

所以 已全部设置为可用 这将允许使用工具来检测、检查、调试和分析 Chromium、Chrome 和其他基于 Blink 的浏览器。讨论中 Controlling Chrome Devtools with Selenium Webdriver @AdiOhana 提到了来自 Profiler Domain 的一些命令的示例用法如下:
    driver.getDevTools().createSession();
driver.getDevTools().send(new Command("Profiler.enable", ImmutableMap.of()));
driver.getDevTools().send(new Command("Profiler.start", ImmutableMap.of()));
//register to profiler events
driver.getDevTools().addListener(new Event("Profiler.consoleProfileStarted", ConsoleProfileStarted.class), new Consumer<Object>() {
@Override
public void accept(Object o) {
//do something
}
});

Note: Until the Profiler domain will added to Selenium java client, you will have to supply your Mapper.



获取域

Fetch Domain将使客户端能够用客户端代码替换浏览器的网络层。
  • 获取域方法如下:
  • Fetch.disable : 禁用获取域。
  • Fetch.enable : 允许发出 requestPaused 事件。请求将被暂停,直到客户端调用 failRequest、fulfillRequest 或 continueRequest/continueWithAuth 之一。
  • Fetch.failRequest : 导致请求因指定原因失败。
  • Fetch.fulfillRequest :提供对请求的响应。
  • Fetch.continueRequest :继续请求,可选择修改其一些参数。
  • Fetch.continueWithAuth :在 authRequired 事件之后继续提供 authChallengeResponse 的请求。
  • Fetch.getResponseBody : 导致从服务器接收响应正文并作为单个字符串返回。只能针对在 Response 阶段暂停的请求发出,并且与 takeResponseBodyForInterceptionAsStream 互斥。在收到正文之前调用影响请求的其他方法或禁用获取域会导致未定义的行为。
  • Fetch.takeResponseBodyAsStream :返回表示响应主体的流的句柄。请求必须在 HeadersReceived 阶段暂停。请注意,在此命令之后,请求不能按原样继续——客户端要么需要取消它,要么提供响应正文。该流仅支持顺序读取,如果指定位置,IO.read 将失败。此方法与 getResponseBody 互斥。在收到正文之前调用影响请求的其他方法或禁用获取域会导致未定义的行为。
  • 获取域事件如下:
  • Fetch.requestPaused : 当域启用并且请求 URL 与指定的过滤器匹配时发出。请求会暂停,直到客户端使用 continueRequest、failRequest 或fulfillRequest 之一进行响应。请求的阶段可以通过 responseErrorReason 和 responseStatusCode 的存在来确定——如果这些字段中的任何一个存在,则请求处于响应阶段,否则处于请求阶段。
  • Fetch.authRequired :在启用域且 handleAuthRequests 设置为 true 时发出。请求被暂停,直到客户端用 continueWithAuth 响应。


  • 引用

    您可以在以下位置找到一些相关的讨论:
  • Can Selenium WebDriver (java) interact with the Browser's inspect tool element selector?
  • What is the difference between WebDriver and DevTool protocol
  • 关于selenium - 如何在 Selenium 中使用 Chrome DevTools 协议(protocol)(使用 Python)来捕获 HTTP 请求和响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59420493/

    43 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com