【问题标题】:Can't find element by ID with puppeteer [duplicate]无法使用 puppeteer 按 ID 找到元素 [重复]
【发布时间】:2020-03-20 20:28:24
【问题描述】:

我的代码中有以下元素:

<div class="MuiButtonBase-root MuiListItem-root MuiListItem-gutters MuiListItem-button" tabindex="0" role="button" aria-disabled="false" id="1"><div class="MuiListItemText-root"><span class="MuiTypography-root MuiListItemText-primary MuiTypography-body1">Arne Nordman (arne@nordman.no)</span></div><span class="MuiTouchRipple-root"></span></div>

此元素是在文本字段中键入后出现的下拉列表的一部分。不幸的是,当我使用以下代码时,无法识别元素。它说“DOMException:无法在'Document'上执行'querySelector':'#1'不是有效的选择器”。

这是我的代码:

const puppeteer = require("puppeteer");

async function run() {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();

  await page.goto("http://localhost:3000/");

  await page.evaluate(() =>
    [...document.querySelectorAll("button")].map(
      elem => elem.innerText === "Personell & Institutions" && elem.click()
    )
  );

  await page.type("input", "arne");
  await page.waitFor(1000);
  await page.$eval("#1", el => console.log("elemnet is:", el.innerText));
}

run();

任何帮助将不胜感激!

【问题讨论】:

  • 那么,您的问题是什么? #1 显然不是一个有效的选择器。选择其他 ID。

标签: javascript dom puppeteer


【解决方案1】:

您可以在选择器中引用“1”:

await page.$eval("#\\31", el => console.log("elemnet is:", el.innerText));

拥有不是标识符的 id 值是可以的,但您会遇到您所看到的 CSS 语法问题。

【讨论】:

  • 非常感谢!由于某种原因不起作用,但我根据您的想法使用了 [id='1'] :)
  • @Nora 抱歉,我会修正答案;它需要两个反斜杠才能通过字符串语法。你的解决方案也很好。
  • 谢谢!真的很高兴你能帮忙:D
猜你喜欢
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 2019-08-08
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 2017-07-23
相关资源
最近更新 更多