Phantomjs / Casperjs从页面内的JS脚本获取URL

时间:2013-10-19 18:38:28

标签: javascript web-scraping phantomjs casperjs

我正在制作一个带幻像/卡斯珀的刮刀。

此时,我需要提取仅在js脚本中出现在页面中的URL。

页面源代码示例:

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

我在评估VAR1VAR2方面没有问题,因为它们位于页面上下文中,但我需要URL,它是硬编码的,没有引用它。根据我所在的页面,URL当然是不同的,我无法猜测它。有什么想法吗?

我的想法:

  1. 由于在页面加载时调用了URL来填充AJAX,我想是可能捕获XHR请求,但我不知道如何。

  2. 我设法使用document.getElementsByTagName('script')获取了我需要的脚本元素。这可能是一种方法,但我如何只获得200多行中需要的线? (以queueRequest开头的

  3. 所以要明确我的问题:

    哪个想法更好,1还是2?

    如果1:如何使用casper捕获请求网址?

    if 2:如何在我的脚本中找到正确的行?

1 个答案:

答案 0 :(得分: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部分。