如果我在Chrome中转到以下网页,则可以正常加载:https://www.cruisemapper.com/?poi=39
但是,当我运行以下PhantomJS脚本时,该脚本只是转到相同的URL并将整个DOM字符串输出到控制台,我收到一条403 Forbidden消息:
var page = require('webpage').create(),
url = 'https://www.cruisemapper.com/?poi=39';
page.open(url, function (status) {
if (status === 'success') {
console.log(page.evaluate(function () {
return document.documentElement.outerHTML;
}));
phantom.exit();
}
});
这是控制台的确切输出:
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.<br>
</p>
</body></html>
我认为,如果添加某种用户代理字符串,它可能会起作用。因此,我在console.log行上方添加了以下内容:
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36';
但是那没有用。因此,我尝试了以下方法:
page.customHeaders = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
};
但是那也不起作用。有人对我如何找到上面的URL而不会收到403 Forbidden消息有任何建议吗?谢谢。
答案 0 :(得分:1)
您的代码对我来说很好(不过我建议您模拟视口大小,请参见代码)。如果您仍然收到403,请尝试更改IP,现在该站点可能已打开(您可能多次访问该页面)。
array(2) { [0]=> int(1) [1]=> int(2) }
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }