page. $ eval ('# search', el => el [id] .value) работает только с выбранным элементом "id" - PullRequest
1 голос
/ 28 мая 2020

Просматривая документацию кукловода, я обнаружил, что page.$eval(selector) запускает document.querySelector(selector) на моей странице: https://github.com/puppeteer/puppeteer/blob/v3.1.0/docs/api.md#pageevalselector -pagefunction-args

Я пытаюсь выбрать вариант из раскрывающегося списка в определенной позиции индекса, которую я могу получить. Чтобы узнать, что делать, я использую консоль chrome и написал следующий код, который отлично работает:

document.querySelector("select#ReportViewerControl_ctl04_ctl03_ddValue")[id_ed].value

Моя проблема в том, что когда я go в свой js файл и пишу то же самое используя page.$eval(selector), он работает только для выбранной опции:

const dropdowns_V3 = await page.$eval("select#ReportViewerControl_ctl04_ctl03_ddValue", all => all[id_ed].value);

Для информации мои варианты раскрывающегося списка выглядят так, и только выбранный получил выбранный атрибут:

<option selected="selected" value="f31211ab-3126-46b3-bd8d-87ce0c262348">&lt;Select&nbsp;a&nbsp;Value&gt;</option>

<option value="1000000430">Perimetre&nbsp;1</option>

1 Ответ

1 голос
/ 29 мая 2020

Поскольку вы выбираете опцию с определенным c идентификатором, она будет вести себя точно так же, как и сама. Кстати, вы можете использовать

const value = await page.evaluate(() => {
  innerValue = document.querySelector('your selector here').value;

  return innerValue;
});

EDIT : всякий раз, когда вы имеете дело с самим содержимым dom, например как получение innerText тега или значения селектора и не выполнение действий, таких как ввод или щелчок, предпочтительно использовать метод evaluate, потому что он имеет лучшую производительность и легче получить именно то, что вы хотите, в браузере content.

Использование $, $$, $ eval, $$ eval, et c., вернет сложный объект, и чтобы получить то, что вы хотите, вам нужно будет обработать его в контексте узла.

-

EDIT 2 : если по какой-либо другой причине вы предпочитаете использовать методы $, $$, $ eval или $$ eval, имейте в виду, что single $ выполняет действие querySelector (), а double $ выполняет querySelectorAll (). QuerySelector возвращает только первый элемент, который соответствует вашему селектору, а querySelectorAll возвращает все элементы, соответствующие вашему селектору. С учетом сказанного, когда вы используете $ an $ eval, вы не должны использовать нотацию индекса массива, поскольку возвращается только один элемент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...