0

我正在用 phantom/casper 构建一个刮板。

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

页面源代码示例:

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

VAR1我在评估and时没有问题VAR2,因为它们在页面上下文中,但我需要 URL,它是硬编码的并且没有引用它。URL当然会根据我所在的页面而有所不同,我无法猜测。有任何想法吗?

我的想法:

  1. 由于在页面加载时调用 URL 以使用 AJAX 填充 div,我正在考虑可能捕获 XHR 请求,但我不知道如何。

  2. 我设法使用document.getElementsByTagName('script'). 这可能是一种方法,但我如何从 200 多行中只得到我需要的行?(以 开头的那个queueRequest

所以要明确我的问题:

哪个想法更好,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 回答