我正在用 phantom/casper 构建一个抓取工具。
此时,我需要提取仅在 js 脚本内出现在页面中的 URL。
页面源代码示例:
<script>
queueRequest('URL.aspx?var1='+VAR1+'&var2='+VAR2, getPageMenu');
</script>
我在评估 VAR1
和 VAR2
时没有问题,因为它们位于页面上下文中,但我需要 URL,该 URL 是硬编码的并且没有对其的引用。 URL 当然根据我所在的页面而不同,我无法猜测它。有什么想法吗?
我的想法:
由于在页面加载时调用 URL 以使用 AJAX 填充 div,我正在考虑捕获 XHR 请求,但我不知道如何实现。
我设法使用
document.getElementsByTagName('script')
获取了我需要的脚本 elem。这可能是一种方法,但如何从 200 多行中只获取我需要的行呢? (以queueRequest
开头的)
所以要明确我的问题:
1 个还是 2 个想法哪个更好?
if 1 :如何使用 casper 捕获请求 URL?
if 2 :如何在脚本中获得正确的行?
最佳答案
如果你想搜索你的脚本 block ,你可以尝试这样的事情:
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);
可能有更严格的方法来实现同样的事情,但正则表达式大致就是您所追求的。请注意,这只会为您提供嵌入脚本 block 中第一次出现的queueRequest('something.something?...) 的URL 部分。
关于javascript - Phantomjs/Casperjs 从页面内的 JS 脚本获取 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19469616/