node.js - Puppeteer无法识别仅具有类型和类的选择器,但会接受完整的选择器

原文 标签 node.js css-selectors puppeteer chromium

我试图单击网页上的cookiewall,但是Puppeteer拒绝仅使用类型和类选择器(button.button-action)识别短选择器。将其更改为完整的CSS选择器可解决此问题,但不是可行的解决方案,因为父元素中的任何机会都可能破坏选择器。据我所知这应该不是问题,因为在有问题的页面上使用document.querySelector("button.button-action")还会返回我尝试单击的元素。

无效的代码:

const puppeteer = require('puppeteer');

const main = async () => {
    const browser = await puppeteer.launch({headless: false,});
    const page = await browser.newPage();
    await page.goto("https://www.euclaim.nl/check-uw-vlucht#/problem", { waitUntil: 'networkidle2' });
    const cookiewall = await page.waitForSelector("button.button-action", {visible: true});
    await cookiewall.click();
};

main();


起作用的代码:

const puppeteer = require('puppeteer');

const main = async () => {
    const browser = await puppeteer.launch({headless: false,});
    const page = await browser.newPage();
    await page.goto("https://www.euclaim.nl/check-uw-vlucht#/problem", { waitUntil: 'networkidle2' });
    const cookiewall = await page.waitForSelector("#InfoPopupContainer > div.ipBody > div > div > div.row.actionButtonContainer.mobileText > button", {visible: true});
    await cookiewall.click();
};

main();

最佳答案

问题是您在那里有三个button.button-action。并且第一场比赛不可见。

enter image description here

您可以做的一件事是waitForSelector但没有可见的位(因为它将检查第一个按钮)。
然后遍历所有项目,检查哪个项目是可单击的。

await page.waitForSelector("button.button-action");
const actions = await page.$$("button.button-action");
for(let action of actions) {
  if(await action.boundingBox()){
    await action.click();
    break;
  }
}

关于node.js - Puppeteer无法识别仅具有类型和类的选择器,但会接受完整的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59843251/

相关文章:

node.js - GitHub ssh认证失败的Node.js子进程

javascript - 水平无序列表的新行

html - CSS中的nth-type和nth-child无法正常工作

css - 为什么CSS不起作用?

node.js - 运行操纵up时输入文本

puppeteer - 如何在 Puppeteer 中单击带有文本的元素

node.js - 在本地使用passport-facebook策略时,无法将用户序列化为 session

javascript - 具有自定义标题的Express正文解析器

javascript - 带句点的MongoDB文本搜索

javascript - 如何使用 querySelector 选择下一个直接子级?