我尝试使用 Puppeteer 单击按钮。 带有我需要单击的按钮的网页:
<div class="submit_fields">
<input type="hidden" name="" value="Y">
<input type="hidden" name="iblock_submit" value="Y">
<input class="btn btn-warning btn-block btn-lg" onclick="gtag('event','Клик по кнопке из раздела', {'event_category': 'Передача показаний','event_label':'Передать показания'}); ym(57063811,'reachGoal','meter_reading_inner'); return true;" type="submit" name="iblock_submit" value="передать">
</div>
我的代码:
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({
executablePath: '/usr/bin/chromium',
'defaultViewport' : { 'width' : 1920, 'height' : 1080 }
});
const page = await browser.newPage();
await page.goto('https://gesbt.ru/chastnym-litsam/peredacha-pokazaniy/');
//code skipped(fill form, NO ERROR)
await page.waitForSelector('#iblock_submit', { hidden: true}); //NO ERROR ONLY THIS ROW
await page.click('#iblock_submit'); // GOT ERROR
错误:找不到选择器的 Node :#iblock_submit
最佳答案
根据您问题中的 html,没有 id 为 iblock_submit
的元素,这就是您输入的内容:
await page.waitForSelector('#iblock_submit', { hidden: true });
await page.click('#iblock_submit'); // GOT ERROR
如果您想查找 name="iblock_submit"
的元素,您需要输入例如这个:
await page.waitForSelector('[name="iblock_submit"]', { hidden: false });
await page.click('[name="iblock_submit"]');
编辑:
您需要了解网站上发生了什么,并尝试进行试验。正确的选择器并不是您唯一需要做的事情。等待事情发生是另一件事需要考虑:
await page.goto('https://gesbt.ru/chastnym-litsam/peredacha-pokazaniy/', { waitUntil: 'networkidle0' });
这可能是一个很好的做法,您可以在您的上下文中尝试一下,看看是否有帮助。您可以在文档中看到所有可以等待的选项:https://github.com/puppeteer/puppeteer/blob/v5.4.1/docs/api.md#pagegotourl-options
关于node.js - Puppeteer 错误没有找到选择器的 Node (单击按钮),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64846461/