javascript - Phantomjs/Casperjs 从页面内的 JS 脚本获取 url

标签 javascript web-scraping phantomjs casperjs

我正在用 phantom/casper 构建一个抓取工具。

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

页面源代码示例:

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

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

我的想法:

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

  2. 我设法使用 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/

相关文章:

javascript - 如何存储用户数据以启用对我的 Angular 应用程序的自动签名?

c# 像 facebook 和 linkedin 一样从 url 获取内容

html - 将脚本元素添加到 DOM 而不执行它

vue.js - Vue SPA - PhantomJS 成功运行,但 Fetch As Google 显示空白

javascript - 使用 PhantomJS 在 Google Alert 中创建警报

javascript - 如何设置图像轮播中可以显示的图像数量限制? (PHP)

javascript - If else 何时会在所有条件下中断 javascript

c# - 如何让 JavaScript 提醒 Razor 变量?

python - Python 中的 XPATH 语法验证器

python - Scrapy 蜘蛛在并行进程中的多处理