0

ファントム/キャスパーでスクレーパーを構築しています。

この時点で、js スクリプト内でのみページに表示される URL を抽出する必要があります。

ページのソース コードの例:

<script>
    queueRequest('URL.aspx?var1='+VAR1+'&var2='+VAR2, getPageMenu');
</script>

とはページ コンテキスト内にあるため、問題なく評価できますが、URL が必要です。URL はハードコードされており、それへの参照はありませVAR1ん。VAR2もちろん、URLはページによって異なり、推測することはできません。何か案は?

私のアイデア:

  1. AJAX で div を埋めるためにページの読み込み時に URL が呼び出されるため、XHR リクエストをキャプチャすることを考えていましたが、方法がわかりません。

  2. を使用して、必要なスクリプト要素を取得できましたdocument.getElementsByTagName('script')。それもひとつの方法かもしれませんが、200 行以上の中から必要な行だけを取得するにはどうすればよいでしょうか。(で始まるものqueueRequest)

SO私の質問を明確にするために:

1 と 2 では、どちらのアイデアが優れていますか?

if 1 : casper でリクエスト URL をキャプチャするにはどうすればよいですか?

if 2 :スクリプトで正しい行を取得するにはどうすればよいですか?

4

1 に答える 1

2

スクリプト ブロックを検索する場合は、次のようにしてみてください。

found = null;
scripts = document.getElementsByTagName('script');

for (i = 0; i < scripts.length; i++)
{
  matches = /queueRequest\('(.+)\?/.exec(scripts[i].innerText)

  if (matches) 
  {
    found = matches[1];
    break;
  }
}

alert(found);

同じことを実装するためのより厳密な方法があるかもしれませんが、正規表現はおおよそあなたが求めているものです. これは、埋め込まれたスクリプト ブロック内の queueRequest('something.something?...) の最初の出現の URL 部分のみを取得することに注意してください。

于 2013-10-19T19:20:38.060 に答える