我知道Fetch Domain
用于此目的,但我不知道如何实现。在Selenium python中,我使用以下代码启用了requestPaused
事件的发布。
driver.execute_cdp_cmd("Fetch.enable",{})
driver.get('https://www.example.com')
但是我不知道如何处理requestPaused
事件(我需要调用一个fulfillRequest
或continueRequest
/ continueWithAuth
)。结果,我的程序停止工作。
如果有人可以提供示例帮助我理解它的工作原理,我将非常感激。
答案 0 :(得分:0)
是,您认为正确。
根据 Selenium v4.0.0-alpha-3 的发行说明:
* Expose devtools APIs from chromium derived drivers.
* Expose presence of devtools support on a role-based interface
根据 Selenium v4.0.0.0-alpha-1 的发行说明:
* Basic support for CDP landed via the "DevTools" interface.
因此chrome-devtools-protocol都可以与selenium4一起使用,这将允许使用工具来检测,检查,调试和分析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
}
});
注意:在将Profiler域添加到Selenium Java客户端之前,您将必须提供Mapper。
Fetch Domain将使客户端能够用客户端代码替代浏览器的网络层。
“提取域”方法如下:
Fetch.disable
:禁用获取域。Fetch.enable
:启用发出requestPaused事件的功能。请求将被暂停,直到客户端调用failRequest,complementRequest或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响应为止。您可以在以下位置找到一些有趣的讨论: