日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Selenium自动化获取WebSocket信息

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Selenium自动化获取WebSocket信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

性能日志

ChromeDriver支持性能日志記錄,您可以從中獲取域“時間軸”,“網絡”和“頁面”的事件,以及指定跟蹤類別的跟蹤數據。

啟用性能日志

默認情況下不啟用性能日志記錄。因此,在創建新會話時,您必須啟用它。
DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);
啟用后,性能日志將收集時間軸,網絡和頁面事件。要同時啟用跟蹤或自定義性能日志記錄,請參閱以下部分。使用默認選項

查看性能日志記錄的完整示例(信用:Michael Klepikov)。 Angular Benchpress還使用性能記錄。

跟蹤和自定義日志記錄

如果您希望自定義性能日志記錄,例如啟用跟蹤,則可以使用perfLoggingPrefs功能(通過ChromeOptions)??梢酝ㄟ^指定一個或多個Chrome跟蹤類別來啟用跟蹤。有關Chrome跟蹤的詳細信息,請參閱此處。

啟用跟蹤時,將隱式禁用時間軸域。請注意,您仍需要使用loggingPrefs功能啟用性能日志。

DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools"); // comma-separated trace categories
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);

RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);
您還可以使用perfLoggingPrefs單獨啟用或禁用網絡和頁面域。例如,您可以在跟蹤時顯式啟用網絡域:

...
Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools");
perfLogPrefs.put("enableNetwork", true);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);
...

關于跟蹤的說明

如果啟用了跟蹤功能,ChromeDriver會在啟動Chrome時啟動瀏覽器范圍的跟蹤,并會繼續跟蹤,直到Chrome關閉。當跟蹤正在運行時,Chrome會緩沖內存中的跟蹤事件,直到跟蹤停止為止。跟蹤緩沖區已滿后,將不再記錄跟蹤事件。為避免完整緩沖區(從而丟失跟蹤數據),ChromeDriver將定期停止當前跟蹤,收集緩沖事件,并在測試期間的某些點重新開始跟蹤。

收集跟蹤事件會增加測試開銷,因此ChromeDriver僅在測試期間的適當點收集跟蹤事件。目前,僅在頁面導航事件以及請求任何ChromeDriver日志(例如性能日志)時收集跟蹤事件。緩沖區仍有可能仍然填充,因此ChromeDriver會監控支持的Chrome版本(r263512及更高版本)的緩沖區使用情況。如果緩沖區填滿,ChromeDriver將記錄警告并將性能日志中的條目添加,如下所述。

收集日志條目

在測試中,您可以獲得如下的性能日志條目。有關更多信息,請參閱??WebDriver日志記錄文檔。

for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
?? ?System.out.println(entry.toString());
}
每個條目都是以下結構的JSON字符串:

{
?? ?"webview": <originating WebView ID>,
?? ?"message": { "method": "...", "params": { ... }} // DevTools message.
}
方法的值是DevTools事件的方法(參見Chrome遠程調試協議文檔)。例如,Timeline事件將為協議的所有版本提供Timeline.eventRecorded?方法,包括1.1版本(編寫本文時的最新版本)。

跟蹤日志條目

從版本1.1開始,跟蹤不是已發布的DevTools協議的一部分,因此詳細信息如下。由于事件是在瀏覽器范圍內收集的,因此

所有跟蹤事件的webview值都將為“瀏覽器”。

有兩種可能的跟蹤事件方法:
  • tracing.dataCollected?:params?將是一個字典形式的單個跟蹤事件
  • tracing.bufferUsage?:params?將包含一個錯誤鍵,并帶有一條消息,指示在測試期間填充的DevTools跟蹤緩沖區,如上所述
下面是一個示例跟蹤事件:

{
?? ?"webview":"browser",
?? ?"message":{
?? ??? ?"method":"Tracing.dataCollected",
?? ??? ?"params":{
?? ??? ??? ?"args":{"layerTreeId":1},
?? ??? ??? ?"cat":"cc,devtools",
?? ??? ??? ?"name":"DrawFrame",
?? ??? ??? ?"ph":"i",
?? ??? ??? ?"pid":11405,
?? ??? ??? ?"s":"t",
?? ??? ??? ?"tid":11405,
?? ??? ??? ?"ts":3846117219.0,
?? ??? ??? ?"tts":1134680
?? ??? ?}
?? ?}
} 在Chrome初始化里面加載如下:

if(sandBoxMode!=0){

? ? ? ? ? ? ChromeOptions options = new ChromeOptions();

? ? ? ? ? ? LoggingPreferences logPrefs = new LoggingPreferences();

? ? ? ? ? ? logPrefs.enable(LogType.PERFORMANCE, Level.ALL);

? ? ? ? ? ? Map<String, Object> perfLogPrefs = new HashMap<String, Object>();

? ? ? ? ? ? perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools"); // comma-separated trace categories

? ? ? ? ? ? options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);

? ? ? ? ? ? options.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);

? ? ? ? ? ? options.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);

? ? ? ? ? ? options.addArguments("lang=zh_CN.UTF-8");

? ? ? ? ? ? options.addArguments("use-fake-ui-for-media-stream");

? ? ? ? ? ? options.addArguments("disable-popup-blocking");

? ? ? ? ? ? options.addArguments("--start-maximized");//設置窗口最大化 新API

? ? ? ? ? ? // options.addArguments("--headless");

? ? ? ? ? ? options.addArguments("--no-sandbox");

? ? ? ? ? ? options.addArguments("--disable-gpu");

? ? ? ? ? ? options.addArguments("--disable-browser-side-navigation");

? ? ? ? ? ? options.addArguments("--dns-prefetch-disable");

? ? ? ? ? ? ChromeOptions capabilities = new ChromeOptions();

? ? ? ? ? ? capabilities.setCapability(ChromeOptions.CAPABILITY, options);

? ? ? ? ? ? capabilities.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

? ? ? ? ? ? driver = new ChromeDriver(capabilities);

? ? ? ? ? ? driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

? ? ? ? ? ? driver.manage().timeouts().pageLoadTimeout(80, TimeUnit.SECONDS);

? ? ? ? ? ? driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);

? ? ? ? ? ? Log.info("Chrome browser started");

? ? ? ? ? ? Constants.sResult="PASS";

?

? ? ? ? ? }else if(sandBoxMode==0){

?

if(sandBoxMode!=0){ChromeOptions options = new ChromeOptions();LoggingPreferences logPrefs = new LoggingPreferences();logPrefs.enable(LogType.PERFORMANCE, Level.ALL);Map<String, Object> perfLogPrefs = new HashMap<String, Object>();perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools"); // comma-separated trace categoriesoptions.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);options.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);options.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);options.addArguments("lang=zh_CN.UTF-8");options.addArguments("use-fake-ui-for-media-stream");options.addArguments("disable-popup-blocking");options.addArguments("--start-maximized");//設置窗口最大化 新API// options.addArguments("--headless");options.addArguments("--no-sandbox");options.addArguments("--disable-gpu");options.addArguments("--disable-browser-side-navigation");options.addArguments("--dns-prefetch-disable");ChromeOptions capabilities = new ChromeOptions();capabilities.setCapability(ChromeOptions.CAPABILITY, options);capabilities.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);driver = new ChromeDriver(capabilities);driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);driver.manage().timeouts().pageLoadTimeout(80, TimeUnit.SECONDS);driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);Log.info("Chrome browser started");Constants.sResult="PASS";}else if(sandBoxMode==0){ View Code

?

調用方法如下:

LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE);for (LogEntry entry : logEntries) {System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " ======" + entry.getMessage());System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel().INFO + " INFO======== " + entry.getMessage());System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel().ALL + " ALL ======== " + entry.getMessage());System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel().SEVERE + " SEVERE ======== " + entry.getMessage());System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel().WARNING + " WARNING ======== " + entry.getMessage());//do something useful with the data}

?

?可以參考

轉載于:https://www.cnblogs.com/a00ium/p/10858740.html

總結

以上是生活随笔為你收集整理的Selenium自动化获取WebSocket信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。