【问题标题】:Puppeteer form submission; Selecting inputs by name and not idPuppeteer 表单提交;按名称而不是 id 选择输入
【发布时间】:2021-08-12 11:37:45
【问题描述】:

我正在尝试通过为 majestic.com 创建一个网络爬虫来学习一些 javascript,这是他们的 api 页面,下面是我需要的表单。

https://developer-support.majestic.com/

这是我的代码

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  await page.goto('https://developer-support.majestic.com/');
  await page.click('#add-item-button')
  await page.click('#add-item-button')

  await page.type('#try-it-out-input' , 'my api key 987654321')
  await page.select('select[name=item0]', '1234');
  console.log('end');

})();

在提交任何内容之前,程序首先必须单击“添加更多项目”按钮两次,因为我需要发送 3 个 url,所以我总共将有 3 个输入字段(这部分有效)。然后我按 id 获取其中一个表单(请求 API 密钥的那个)并填写它,这也很好。

当我尝试用 url 填写 3 个表单时,我的问题就开始了。他们没有id,但他们有名字,比如item0、item1和item3,但我想不出选择它们的方法。我希望有人能指出错误在哪里。谢谢!

【问题讨论】:

  • 您最后的select 电话看起来对我来说是正确的,可以通过名称进行选择(也许需要引用?)。只要确保您选择了正确的标签(在您链接的页面上,我没有看到任何名称为 item0 的选择,但我确实看到了名称为 item0 的 <input>s。
  • 谢谢!是的,lejlun 指出了同样的错误,但是我得到了一个错误:) UnhandledPromiseRejectionWarning: E​​rror: Evaluation failed: Error: Element is not a

标签: javascript forms post puppeteer


【解决方案1】:

没有选择标签,name="item0" 只有一个输入标签,当你使用这个选择器时,你的脚本可以工作。

await page.select('input[name="item0"]', '1234');

【讨论】:

  • 感谢您的回复!我试过了,但它返回一个错误,UnhandledPromiseRejectionWarning: E​​rror: Evaluation failed: Error: Element is not a
  • 如果你想在输入框中输入1234,你应该使用这个,await page.type('input[name="item0"]', '1234')@freemanfl
  • 1234 是一个例子,我会用网站的 url 填写表格,但我明白你的意思。我试过了,由于某种原因它填满了旧表格! “试试看”而不是 num0 imgur.com/a/R1tSq6F 你认为我选错了表格吗?也许这是页面加载方式的一些时间问题?
  • 我创建了一个 SO 聊天室,加入 here。 @freemanfl
猜你喜欢
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2019-09-21
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
相关资源
最近更新 更多