最近,我通过phantomjs-node整合了节点和幻像。我打开了有iframe元素的页面,我可以获取iframe的超链接元素,但是当我执行点击它时失败了。 你有办法吗?有人可以帮帮我吗?
示例:
page.open(url);
...
page.evaluate(function(res){
var childDoc = $(window.frames["iframe"].document),
submit = childDoc.find("[id='btnSave']"),
cf = submit.text();//succeed return text
submit.click()//failed
return cf;
},function(res){
console.log("result="+res);//result=submit
spage.render("test.png");//no submit the form
ph.exit();
});
答案 0 :(得分:2)
您无法在iframe中执行内容。你只能从中读取。您甚至从iframe创建了一个新文档,该文档仅包含iframe的文本表示形式,但它绝不会链接到原始iframe。
您需要使用page.switchToFrame
切换到框架以执行在框架上而不先复制它。
看起来switchToFrame
未在phantomjs-node中实现。您可以尝试node-phantom。
如果iframe位于同一个域中,您可以尝试here中的以下内容:
submit = $("iframe").contents().find("[id='btnSave']")
cf = submit.text();
submit.click()
如果iframe不是来自同一个域,则需要创建关闭了网络安全的页面:
phantom.create('--web-security=false', function(page){...});