Quantcast
Viewing all articles
Browse latest Browse all 8862

Node.js+Selenium WebDriverでブラウザのエラーログを取得する話

はじめに

こんにちは。
surimi_panです。

本記事はNorth Detail Advent Calendar 2019の19日目の記事となります。
日付の数字(19)が西暦の下2桁(19)と一緒ですが、当記事に19に関わる要素は特にありません。

今回はNode.jsとSelenium WebDriverを利用して、
Google Chromeの開発者ツールにて出力されるログの中にエラーが無いかをチェックします。

要件

  • Google Chromeの開発者ツールに出力されるエラーを取得したい。
  • 取得するエラーログは深刻なものに限る。(WARNINGは含まない)

手段

Selenium WebDriverの、ログを取得する機能( selenium-webdriver/lib/logging )を利用します。
ブラウザのログをレベル(=ログの重要度)で絞り込んで取得することができます。

実装

require('chromedriver');constchrome=require('selenium-webdriver/chrome');constwebdriver=require('selenium-webdriver');constBuilder=webdriver.Builder;constcapabilities=webdriver.Capabilities.chrome();const{Preferences,Type,Level}=require('selenium-webdriver/lib/logging');// ログを調べたいWebページのURLconsttargetUrl='調べたいWebページのURL';constlogPrefs=newPreferences();logPrefs.setLevel(Type.BROWSER,Level.SEVERE);capabilities.setLoggingPrefs(logPrefs);constoptions=newchrome.Options(capabilities);// エラーログを出力する(asyncfunctionprintConsoleErrors(){constdriver=awaitnewBuilder().forBrowser('chrome').setChromeOptions(options).build();awaitdriver.get(targetUrl);awaitdriver.sleep(5000);leterrors=awaitdriver.manage().logs().get(Type.BROWSER);for(vari=0;i<errors.length;i++){console.log(errors[i].message);}awaitdriver.quit();})();

詳細

取得するログの種類の絞り込み

constlogPrefs=newPreferences();logPrefs.setLevel(Type.BROWSER,Level.SEVERE);capabilities.setLoggingPrefs(logPrefs);

取得するログの種類、レベルを絞り込みます。
今回はブラウザのエラーログを取得したいので、
取得したいログの対象をBROWSER(ブラウザ)、
取得したいログのレベルをSEVERE(最も深刻なもの→エラー)に設定します。

ログの絞り込みの設定を適用

constoptions=newchrome.Options(capabilities);
constdriver=awaitnewBuilder().forBrowser('chrome').setChromeOptions(options).build();

WebDriverインスタンスを作る際にログの絞り込み設定を反映させます。

ページの遷移と待機

awaitdriver.get(targetUrl);awaitdriver.sleep(5000);

チェックしたいページに遷移して一定時間待機します。
時間差でエラーが出るものを考慮して気持ち長めに待機時間を設定しています。

エラーログの取得

leterrors=awaitdriver.manage().logs().get(Type.BROWSER);

ブラウザのエラーログを取得します。
取得されるログのレベルはSEVEREに設定されていますので、エラーのみ取得します。

取得したエラーの出力

for(vari=0;i<errors.length;i++){console.log(awaiterrors[i].message);}

配列で返ってくるので、展開してコンソールに出力します。

まとめ

実行すると、エラーを吐くページではエラーログが次々出力されます。

Webページのスクレイピングやフォームのテスト等で利用されがちなSeleniumですが、
変わったこともできますよ!という記事でした。

資料が少なく、公式ドキュメントとにらめっこしながらの実装となりました。
不備不足あればご指摘頂けると大変助かります。


Viewing all articles
Browse latest Browse all 8862

Trending Articles