Phantomjs 抛出“此页面使用框架,但您的浏览器不支持它们”错误,即使在设置了正确的用户代理后也是如此
Phantomjs throwing "This page uses frames, but your browser doesn't support them" error even after setting the correct useragent
当我尝试使用phantomjs打开我们内部应用程序的一个网页(适用于IE8)时,"page.content"显示在html消息下方。但是,page.render("test.png")显示完全加载的页面。我已将page.settings.useragent设置为为什么.render()和.content之间存在差异?如何调试/解决此问题?
网页输出:
<html>
<frameset id="mainFrameSet" border="0" frameborder="yes" framespacing="1" rows="37px,*" topmargin="0" leftmargin="0" bordercolor="#cdcdcd">
<frame name="header" src="<src>" frameborder="0" marginheight="0" bordercolor="#cdcdcd" marginwidth="0" noresize="" scrolling="no" bor
der="0">
<frame frameborder="0" border="0" name="main" id="main" src="<src>" bordercolor="#cdcdcd" scrolling="auto" leftmargin="0">
<noframes>
<BODY>
<P>This page uses frames, but your browser doesn't support them.</P>
</BODY>
</noframes>
</frameset>
</html>
我的代码:
var page = require("webpage").create(), testindex = 0, loadInProgress = false;
page.settings.javascriptEnabled = true;
page.settings.localToRemoteUrlAccessEnabled = true;
page.settings.XSSAuditingEnabled = true;
page.viewportSize = { width: 1366, height: 768 };
page.settings.userAgent = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)';
//Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)
//Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
//Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.8 Safari/534.34
//Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
//Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0)
//Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
//SpecialAgent
//Load Login Page
page.open("<URL>");
window.setTimeout(function(){
enterLoginCredentials();
},10000);
function enterLoginCredentials (){
//Enter Credentials
page.evaluate(function() {
console.log("Loading login page..: " + url);
var uName = document.getElementsByName("username");
var uPass = document.getElementsByName("password");
uName[0].value="username";
uPass[0].value="password";
});
window.setTimeout(function(){
clickLogin();
},1000);
}
function clickLogin(){
//Login
page.evaluate(function() {
var formSubmit = document.forms["loginForm"];
formSubmit.submit();
});
window.setTimeout(function(){
search();
},10000);
page.render("LRMLogin111.png");
}
function search(){
page.render("Homepage.png");
console.log("Homepage "+page.content);
phantom.exit();
}
即使在今天,有些页面也使用框架。与您选择的浏览器的开发人员工具相比,PhantomJS在主DOM中不包含子帧的DOM。例如,请参阅试图克服此问题的此问题:转储包含iframe的页面的HTML。
如果您真的想打印和操作子框架,则必须切换到它们。这通常是用 page.switchToFrame
.若要获取内容,可以记录 page.frameContent
属性。
page.render("Homepage.png");
console.log(page.frameContent); // same as page.content here
console.log("############################################");
page.switchToFrame(0); // first child frame
console.log(page.frameContent); // different as page.content here
console.log("############################################");
page.switchToMainFrame(); // switch back up before switching to the second child
page.switchToFrame(1); // second child frame
console.log(page.frameContent); // different as page.content here
console.log("############################################");
page.switchToMainFrame();
console.log(page.frameContent); // same as page.content here
相关文章:
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- NodeJS错误-Can't在发送标头后设置标头
- 错误:Can't在从forEach循环发送标头后设置标头
- 未捕获的类型错误:无法设置属性'innerHTML'如果为null,则将脚本移动到正文不会;不起作用
- PhantomJS(vs nightwatch.js)设置cookie错误
- 未捕获的类型错误:无法设置属性'背景'的未定义
- Express 4错误:Can't在发送标头后设置标头
- 任何人都知道IE7设置或更新/补丁,它可以防止IE因为jquery错误而无法加载页面
- JavaScript数组值设置错误
- 当张贴到数据库时,I'我得到了一个“;可以't在它们被发送错误之后设置报头”;
- Javascript设置日期不起作用,显示错误的时间
- NodeJS未处理的拒绝错误:Can't在发送标头后设置标头
- 未捕获的类型错误:无法设置属性'onclick'为null.已尝试window.onload
- 未捕获类型错误:无法设置未定义的属性“操作”
- 节点.js未捕获的异常类型错误:无法设置未定义的预处理 ''
- 谷歌地图:- 无效值错误:设置图标:不是字符串;并且没有网址属性;并且没有路径属性
- Json字符串如果键错误设置显示.否则显示数据
- jquery数据表的Javascript语法错误设置属性
- ES6 /巴别塔传播错误设置
- 创建图像元素,然后通过javascript错误设置样式属性