Как щелкнуть по элементу с идентификатором, содержащим двоеточия в puppeteer?

#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"]');