我正在制作一个带幻像/卡斯珀的刮刀。
此时,我需要提取仅在js脚本中出现在页面中的URL。
页面源代码示例:
<script>
queueRequest('URL.aspx?var1='+VAR1+'&var2='+VAR2, getPageMenu');
</script>
我在评估VAR1
和VAR2
方面没有问题,因为它们位于页面上下文中,但我需要URL,它是硬编码的,没有引用它。根据我所在的页面,URL当然是不同的,我无法猜测它。有什么想法吗?
我的想法:
由于在页面加载时调用了URL来填充AJAX,我想是可能捕获XHR请求,但我不知道如何。
我设法使用document.getElementsByTagName('script')
获取了我需要的脚本元素。这可能是一种方法,但我如何只获得200多行中需要的线? (以queueRequest
开头的
所以要明确我的问题:
哪个想法更好,1还是2?
如果1:如何使用casper捕获请求网址?
if 2:如何在我的脚本中找到正确的行?
答案 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部分。