Не удается найти элемент по идентификатору с кукловодом

У меня есть следующий элемент в моем коде:

<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 ([email protected])</span></div><span class="MuiTouchRipple-root"></span></div>

Этот элемент является частью выпадающего списка, который появляется после ввода текста в текстовое поле. К сожалению, когда я использую следующий код, элемент не может быть идентифицирован. В нем говорится: «DOMException: не удалось выполнить« 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();

Любая помощь будет по-настоящему оценена!


person Nora    schedule 25.11.2019    source источник
comment
Итак, какой у вас вопрос? #1, очевидно, не является допустимым селектором. Выберите другой идентификатор.   -  person Sebastian Simon    schedule 25.11.2019


Ответы (1)


Вы можете указать «1» в селекторе:

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

Это нормально иметь значения id, которые не являются идентификаторами, но вы столкнетесь с проблемами синтаксиса CSS, которые вы видите.

person Pointy    schedule 25.11.2019
comment
Большое спасибо! По какой-то причине это не сработало, но вместо этого я использовал [id='1'] на основе вашей идеи :) - person Nora; 25.11.2019
comment
@Nora, извините, я исправлю ответ; ему нужны две обратные косые черты, чтобы обойти синтаксис строки. Ваше решение тоже подходит. - person Pointy; 25.11.2019
comment
Спасибо! Очень мило с твоей стороны помочь :D - person Nora; 25.11.2019