サイトで実行するスクリプトを作成するためにbrowsermobとseleniumを使用しています。ページ上のすべての要素を特定の名前で取得しようとしています。私の問題は、window.document.getElementsByName("name");
browsermobを使おうとすると、それwindow
が定義されていないと言うことです。ウィンドウをどのように定義しますか?
1 に答える
selenium.getEval()を呼び出す必要があります。その呼び出しの特徴は、ブラウザで実行されるJavaScriptである文字列引数を取り、返された結果の文字列表現である文字列を返すことです。
その最後の部分(文字列表現)は重要です。BrowserMobスクリプトでは確かにこれを行うことはできませんが、次のようになります。
var elements = window.document.getElementsByName("name");
また、これを行うことはできません:
var elements = selenium.getEval('return window.document.getElementsByName("name")');
この2番目の例は、実行する必要のあるものに近いものですが、getElementsByNameが文字列に変換されるDOMオブジェクトの配列を返すため、完全には機能しません。代わりに、これらの要素をどのように処理するかを決定し、必要なものを正確に返す、より大きなJSスニペットを作成して評価する必要があります。
たとえば、これにより、ページの2番目のリンクのhref属性が返されます。
var secondHref = selenium.getEval('return window.document.getElementsByName("a")[1].href');
それがお役に立てば幸いです。理解する必要がある主なことは、BrowserMobスクリプトはJavaScriptで記述できますが、それが実行されるJavaScript環境はブラウザーにないということです。ブラウザで任意のJavaScriptを評価するには、getEval()を実行する必要があります。これにより、JavaScript内のJavaScriptの状況が少し作成され、少し混乱する可能性があります。