Javascript 如何模拟支持JS的浏览器?

Javascript 如何模拟支持JS的浏览器?,javascript,browser,scripting,Javascript,Browser,Scripting,我需要下载一个网页使用脚本(PHP,Python,Bash),而不是使用GUI浏览器。问题在于网页的前端检查是否涉及支持JS的浏览器。所以,我从给定URL使用naive下载得到的只是初始页面(在本例中,我想到的是Coursera课程页面:) 如何使用脚本下载“真实”内容?到目前为止,我能想到这样的解决方案(一些疯狂的): 弄清楚启动页面上的JS是做什么的,并在我的脚本中模拟它,可能会加载另一个页面 使用Wireshark扫描网络流量,并找到一种模式,该模式使得对页面ABC1.html的请求以获

我需要下载一个网页使用脚本(PHP,Python,Bash),而不是使用GUI浏览器。问题在于网页的前端检查是否涉及支持JS的浏览器。所以,我从给定URL使用naive下载得到的只是初始页面(在本例中,我想到的是Coursera课程页面:)

如何使用脚本下载“真实”内容?到目前为止,我能想到这样的解决方案(一些疯狂的):

  • 弄清楚启动页面上的JS是做什么的,并在我的脚本中模拟它,可能会加载另一个页面
  • 使用Wireshark扫描网络流量,并找到一种模式,该模式使得对页面
    ABC1.html
    的请求以获取页面
    ABC1body.html
  • 启动外部浏览器以下载页面(
    execfirefox--dump),而不是本机(针对给定语言)下载功能http://foo.bar/x.html
    ——这是我编的,我甚至不知道是否有具有脚本功能的浏览器)
还有其他想法吗?如果有经过测试的,我将不胜感激

删除脚本并编写浏览器插件也是一种选择,但由于我现在已经花了一些时间来编写脚本,修复它们似乎更快,而不是从头开始编写。它本质上是一个无头浏览器,模仿所有功能

使用node和phantomjs模块,您可以下载页面并对其进行完全控制,包括对JavaScript的完全访问

var page = require('webpage').create();
var url = 'http://www.phantomjs.org/';
page.open(url, function (status) {
    //Page is loaded!
    phantom.exit();
});

查收-你就这么做吧。@JustinBicknell,它属于“从头开始做”类别,因为它可以解决下载问题(我想!),但我会将我的脚本的其余部分重写为JS。你可以随时将phantomjs输出传递给你以前编写的脚本——或者通过http post,或者将该文件放到文件系统中,然后删除您的代码resides@JustinBicknell好的,看起来不错,我只会等待更多的其他想法,如果没有出现的话,我会和PhantomJS一起去,谢谢。我的观点是URL可以从shell启动浏览器,其他脚本可以用PID关闭它,在中间,通过tampermonkey的浏览器可以做phantom做的任何事情,还有更多。。。