使用puppeteer,如何以编程方式提交表单?到目前为止,如果表单实际上包含提交输入,我可以使用page.click('.input[type="submit"]')来完成这项工作.但对于不包含提交输入的表单,关注表单文本输入元素并使用page.press('Enter')似乎并不会导致表单提交:

const puppeteer = require('puppeteer');

(async() => {

    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://stackoverflow.com/', {waitUntil: 'load'});
    console.log(page.url());

    // Type our query into the search bar
    await page.focus('.js-search-field');
    await page.type('puppeteer');

    // Submit form
    await page.press('Enter');

    // Wait for search results page to load
    await page.waitForNavigation({waitUntil: 'load'});


    console.log('FOUND!', page.url());

    // Extract the results from the page
    const links = await page.evaluate(() => {
      const anchors = Array.from(document.querySelectorAll('.result-link a'));
      return anchors.map(anchor => anchor.textContent);
    });
    console.log(links.join('\n'));
    browser.close();

})();

推荐答案

如果您试图填写并提交login form,您可以使用以下选项:

await page.goto('https://www.example.com/login');

await page.type('#username', 'username');
await page.type('#password', 'password');

await page.click('#submit');

await page.waitForNavigation();

console.log('New Page URL:', page.url());

Node.js相关问答推荐

NodeJS缓冲区大小逻辑:为什么默认是8KB,而不仅仅是数据大小?

GraphQL MongoDB Mongoose填充字段未获取多个类别

如何使用MongoDB在Node.js 中向数组中添加项?

NPM:一般的npm二进制依赖可以静态构建吗?

用于SLACK命令返回json而不是文本的AWS lambda函数

mongodb首先自连接,然后根据某些条件与另一个表连接

如何模拟 mysql2 `getConnection`

如何使用Stripe测试失败的收费?

Mongoose post中间件触发deleteMany

express 和 mongoose 的新密码不正确

为什么 $or 在带有正则表达式的mongoose 中不能正常工作

TypeError:changeChecked 不是函数

FirebaseCloudMessaging : PlatformException (PlatformException(null-error, Host platform returned null value for non-null return value., null, null))

在数组的另一个对象中获取数组的mongoose 对象

2 x 匹配标准显示没有结果

eslint - vscode 的可选链接错误

socket.io 发出回调合适吗?

错误:大多数中间件(如 bodyParser)不再与 Express Bundle

如何为 node.js 服务器分配域名?

从 node.js 连接到 mongodb 时出现 ECONNREFUSED 错误