【发布时间】:2023-04-03 14:26:01
【问题描述】:
我正在尝试下载几乎完全由 JavaScript 生成的网站的 HTML。所以,我需要模拟浏览器访问并一直在玩PhantomJS。问题是,该站点使用 hashbang URL,我似乎无法让 PhantomJS 处理 hashbang - 它只是不断调用主页。
该网站是http://www.regulations.gov。默认将您带到#!home。我尝试使用以下代码(来自 here)来尝试处理不同的 hashbang。
if (phantom.state.length === 0) {
if (phantom.args.length === 0) {
console.log('Usage: loadreg_1.js <some hash>');
phantom.exit();
}
var address = 'http://www.regulations.gov/';
console.log(address);
phantom.state = Date.now().toString();
phantom.open(address);
} else {
var hash = phantom.args[0];
document.location = hash;
console.log(document.location.hash);
var elapsed = Date.now() - new Date().setTime(phantom.state);
if (phantom.loadStatus === 'success') {
if (!first_time) {
var first_time = true;
if (!document.addEventListener) {
console.log('Not SUPPORTED!');
}
phantom.render('result.png');
var markup = document.documentElement.innerHTML;
console.log(markup);
phantom.exit();
}
} else {
console.log('FAIL to load the address');
phantom.exit();
}
}
此代码生成正确的 hashbang(例如,我可以将 hash 设置为 '#!contactus'),但它不会动态生成任何不同的 HTML——只是默认页面。但是,当我调用 document.location.hash 时,它会正确输出。
我也尝试将初始地址设置为 hashbang,但是脚本只是挂起并且没有执行任何操作。例如,如果我将 url 设置为 http://www.regulations.gov/#!searchResults;rpp=10;po=0,则脚本在将地址打印到终端后就会挂起,并且什么也没有发生。
【问题讨论】:
-
这与 Python 有什么关系?
-
好点 - 我不知道为什么我把那个标签放在那里。
-
我在windows上试过了。但很可能,我成功了。
-
@mattn -- 你能提供更多关于你做了什么以及它是否有效的信息吗?
-
我可以看到 result.png 是存在的。和 html 出现。我没有挂起。
标签: javascript web-scraping hashbang phantomjs