1

サイトで実行するスクリプトを作成するためにbrowsermobとseleniumを使用しています。ページ上のすべての要素を特定の名前で取得しようとしています。私の問題は、window.document.getElementsByName("name");browsermobを使おうとすると、それwindowが定義されていないと言うことです。ウィンドウをどのように定義しますか?

4

1 に答える 1

3

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の状況が少し作成され、少し混乱する可能性があります。

于 2010-08-19T15:24:28.950 に答える