puppeteer - 如何提交表单
puppeteer - how to submit form
如何提交表格?
我有一个简单的搜索栏和一个搜索按钮。以下输入搜索字符串,但未触发点击事件。当 headless 设置为 false 并且我在 serachfield 中手动单击 enter 时,搜索工作正常。如何提交按钮?
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('http://localhost:3000', {waitUntil: 'networkidle'});
await page.focus('#search');
// Type our query into the search bar
await page.type('michael');
// Submit form
await page.press('Enter');
await page.screenshot({path: './screenshots/search3.png'});
browser.close();
})();
我的搜索栏
search(e) {
e.preventDefault();
this.props.onClick(this.props.value);}
render() {
return (<form className="form-inline" id="search-form" onSubmit
{this.search}>
<div className="form-group">
<input
type="text"
className="form-control"
id="search"
value={this.props.value}
placeholder={this.props.placeHolder}
onChange={this.props.onChange}
/>
<button primary type="submit" >
{this.props.buttonText}
</button>
</div>
</form>);
}
更新
这不起作用:
const searchForm = await page.$('#search-form');
await searchForm.evaluate(searchForm => searchForm.submit());
它执行回发并清除表单中的文本,即使它应该使用 preventDefault 触发函数。
所以问题似乎出在这行代码 await
searchForm.evaluate(searchForm => searchForm.submit());
这是有效的:
我将代码更改为:
await page.click('#search-button');
await page.waitForNavigation();
假设您的搜索栏将 "search" 作为其 ID,
基本上你需要使用选择器表达式来获取搜索栏的句柄,然后使用 evaluate
函数你可以提交表单,
您需要有以下代码片段才能提交表单,
const searchForm = await page.$('#search');
await searchForm.evaluate(searchForm => searchForm.submit());
希望对您有所帮助
先关注这个link
你的问题
当你按下回车而不是截屏时,这就是问题。
// this code just await press event finished, but not form submitted finished,
//in this way, you can not screenshot form submit finished status
await page.press('Enter');
await page.screenshot({path: './screenshots/search3.png'});
// form submitting ...
这就是您的代码无法运行的原因。
希望能帮到你
我使用这个而不是提交表单解决了这个问题:
await page.click('#search-button');
await page.waitForNavigation();
您可以通过发送以下方式提交表格:
await page.click("button[type=submit]");
Found here:
如何提交表格? 我有一个简单的搜索栏和一个搜索按钮。以下输入搜索字符串,但未触发点击事件。当 headless 设置为 false 并且我在 serachfield 中手动单击 enter 时,搜索工作正常。如何提交按钮?
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('http://localhost:3000', {waitUntil: 'networkidle'});
await page.focus('#search');
// Type our query into the search bar
await page.type('michael');
// Submit form
await page.press('Enter');
await page.screenshot({path: './screenshots/search3.png'});
browser.close();
})();
我的搜索栏
search(e) {
e.preventDefault();
this.props.onClick(this.props.value);}
render() {
return (<form className="form-inline" id="search-form" onSubmit
{this.search}>
<div className="form-group">
<input
type="text"
className="form-control"
id="search"
value={this.props.value}
placeholder={this.props.placeHolder}
onChange={this.props.onChange}
/>
<button primary type="submit" >
{this.props.buttonText}
</button>
</div>
</form>);
}
更新
这不起作用:
const searchForm = await page.$('#search-form');
await searchForm.evaluate(searchForm => searchForm.submit());
它执行回发并清除表单中的文本,即使它应该使用 preventDefault 触发函数。
所以问题似乎出在这行代码 await
searchForm.evaluate(searchForm => searchForm.submit());
这是有效的:
我将代码更改为:
await page.click('#search-button');
await page.waitForNavigation();
假设您的搜索栏将 "search" 作为其 ID,
基本上你需要使用选择器表达式来获取搜索栏的句柄,然后使用 evaluate
函数你可以提交表单,
您需要有以下代码片段才能提交表单,
const searchForm = await page.$('#search');
await searchForm.evaluate(searchForm => searchForm.submit());
希望对您有所帮助
先关注这个link
你的问题
当你按下回车而不是截屏时,这就是问题。
// this code just await press event finished, but not form submitted finished,
//in this way, you can not screenshot form submit finished status
await page.press('Enter');
await page.screenshot({path: './screenshots/search3.png'});
// form submitting ...
这就是您的代码无法运行的原因。
希望能帮到你
我使用这个而不是提交表单解决了这个问题:
await page.click('#search-button');
await page.waitForNavigation();
您可以通过发送以下方式提交表格:
await page.click("button[type=submit]");
Found here: