#puppeteer
#puppeteer
Вопрос:
Кнопка имеет идентификатор, подобный этому my:very:beautiful:button
<input id="my:very:beautiful:button" type="image" src="https://xxx/search_off.gif" name="my:very:beautiful:button" onmouseout="imgOff('searchBttn', this)" onmouseover="imgOn('searchBttn', this)" class="btn searchBttn" onclick="doSubmit(this, 'clearBttn')">
В puppeteer моя попытка нажать на эту кнопку:
await page.click('#my:very:beautiful:button');
Выдает:
Error: Evaluation failed: DOMException: Failed to execute 'querySelector' on 'Document': '#my:very:beautiful:button' is not a valid selector.
С двойными управляющими символами:
await page.click('#my\:very\:beautiful\:button');
Выдает:
Error: No node found for selector: #my:very:beautiful:button
Я предполагаю, что проблема в двоеточии. Есть мысли, как щелкнуть по нему?
Комментарии:
1. Я смог заставить его работать со вторым вариантом
await page.click('#my\:very\:beautiful\:button');
Ответ №1:
Работает «двойное экранирование». Двоеточие не должно быть проблемой.
Проблема, скорее всего, в том, что элемент просто еще не был отрисован. Чтобы дождаться, пока элемент будет отображен первым, вы можете использовать функцию page.waitForSelector
следующим образом:
const selector = '#my\:very\:beautiful\:button';
await page.waitForSelector(selector);
await page.click(selector);
Комментарии:
1. Вы правы, он ожидал какого-либо обращения или рендеринга.
waitForSelector
не помогло, но статический режим ожидания на 1 секунду сделал свое делоawait page.waitFor(1000)
Ответ №2:
Вы можете попробовать использовать селектор атрибутов:
await page.click('[id="my:very:beautiful:button"]');