NightmareJS: "Не удалось выполнить 'querySelector' для 'Document': '# LINK1 $ 1' не является допустимым селектором." - PullRequest
0 голосов
/ 01 июня 2018

Я использую NightmareJS, чтобы очистить веб-сайт для данных, и этот сайт использует идентификаторы на их якорных тегах аналогично коду ниже.

<div>
    <a id="#LINK1$1"></a>
</div>

Я пытаюсь использовать метод .click (Selector), который использует querySelector по умолчанию, но я не могу получить тег привязки по id.Я пробовал оба

.click('#LINK1$1'),
.click('\u{0023}LINK\u{0031}\u{0024}\u{0031}')

Но оба они приводят к одной и той же ошибке

"Failed to execute 'querySelector' on 'Document': '#LINK1$1' is not a valid selector."

Что мне делать?

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете использовать способ Xpath для этого.Кукловод имеет функцию xpath.

Теория

Из своих документов

page.$x(expression)
expression <string> Expression to evaluate.
returns: <Promise<Array<ElementHandle>>>
The method evaluates the XPath expression.

Он вернет массив элементов.Мы можем click их, как мы хотим.

Практика

Получить xpath для элемента, enter image description here

Теперь примените его,

// we execute the xpath
const elems = await page.$x(`//*[@id="#LINK1$1"]`)

// We click the first element, since it returns an array
await elems[0].click();

Готово!

Кстати, это также работает в браузере,

function getElementByXpath(path) {
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
getElementByXpath(`//*[@id="#LINK1$1"]`)
// >> Returns single node <a id=​"#LINK1$1">​Test​</a>​
...