Javascript 我可以模拟按下“按钮”吗;输入“;仅使用帧参照输入木偶演员?

Javascript 我可以模拟按下“按钮”吗;输入“;仅使用帧参照输入木偶演员?,javascript,iframe,puppeteer,Javascript,Iframe,Puppeteer,我真的很想使用Puppeter在iframe中提交一个表单,我发现通过 页面。键盘。按('Enter'); 然而,对于我想做的几乎所有其他事情,我需要传递的只是对我感兴趣的iframe的引用。例如,我可能有一个方法可以填写并提交如下表单: //其他一些安装脚本 const page=wait context.newPage(); const frame=page.frames().find(frame=>frame.name()==='myFrame');//Iframe ref //实用方法

我真的很想使用Puppeter在iframe中提交一个表单,我发现通过

页面。键盘。按('Enter');
然而,对于我想做的几乎所有其他事情,我需要传递的只是对我感兴趣的iframe的引用。例如,我可能有一个方法可以填写并提交如下表单:

//其他一些安装脚本
const page=wait context.newPage();
const frame=page.frames().find(frame=>frame.name()==='myFrame');//Iframe ref
//实用方法
函数useTheForm(框架){
// ...
//是否进行其他杂项表单设置
// ...
wait frame.type('myInput','Some Value');
//TODO:以某种方式提交表单。。。
//“frame.keyboard”不存在。需要某种引用,如“frame.page”
//框架._框架管理器._页面.键盘.按('Enter')可以工作,但有点脏。。。
}
//使用我们的实用方法
使用模板(框架);

我真的希望能够使用“回车”键提交表单,而不必同时跟踪和传递对
页面的引用,但是我不太愿意使用API中没有记录的内部属性。

您可以在iframe中聚焦一个元素,然后用
page.keyboard
按键。下面是一个示例,在iframe中的焦点链接上按Enter键会导致iframe导航(尽管由于站点iframe策略,此导航似乎失败):

const puppeter=require('puppeter');
(异步函数main(){
试一试{
const browser=wait puppeter.launch(
{headless:false,defaultViewport:null});
const[page]=wait browser.pages();
等待页面。转到('https://example.org/');
常量数据=等待页面。评估(()=>{
document.body.appendChild(document.createElement('iframe')).src=
'https://example.org/?foo=bar';
});
等待页面。等待(3000);
log(page.frames().map(frame=>frame.url());
等待page.frames()[1]。焦点('a');
等待页面。键盘。按('Enter');
//等待浏览器关闭();
}捕捉(错误){
控制台错误(err);
}
})();

您可以聚焦iframe中的一个元素,然后用
页面键盘按一个键。下面是一个示例,在iframe中的焦点链接上按Enter键会导致iframe导航(尽管由于站点iframe策略,此导航似乎失败):

const puppeter=require('puppeter');
(异步函数main(){
试一试{
const browser=wait puppeter.launch(
{headless:false,defaultViewport:null});
const[page]=wait browser.pages();
等待页面。转到('https://example.org/');
常量数据=等待页面。评估(()=>{
document.body.appendChild(document.createElement('iframe')).src=
'https://example.org/?foo=bar';
});
等待页面。等待(3000);
log(page.frames().map(frame=>frame.url());
等待page.frames()[1]。焦点('a');
等待页面。键盘。按('Enter');
//等待浏览器关闭();
}捕捉(错误){
控制台错误(err);
}
})();