Xpath:在 Devtools 中工作,但 returns 具有 document.evaluate() 的空对象
Xpath: Working in Devtools but returns empty object with document.evaluate()
以下命令在 Devtools 控制台中按预期工作(例如,此处 - https://news.ycombinator.com/)
$x('//a[@class="storylink"]')
(边缘浏览器)
但是下面的代码:
const page = await browser.newPage();
await page.goto("https://news.ycombinator.com/");
let urls = await page.evaluate(() => {
var item = document.evaluate(
'//a[@class="storylink"]',
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
return item
})
browser.close();
returns 空对象:{}
。同样的情况也发生在其他所有网站上。
为什么会这样?
如果您使用来自 Node.js 的 Puppeteer 自动 Chrome,那么您已经公开的 page
对象的 $x
方法用于 XPath 评估,请参阅 https://pptr.dev/#?product=Puppeteer&version=v10.4.0&show=api-pagexexpression.这意味着做
let urls = await page.$x('//a[@class="storylink"]')
应该足够了。
以下命令在 Devtools 控制台中按预期工作(例如,此处 - https://news.ycombinator.com/)
$x('//a[@class="storylink"]')
(边缘浏览器)
但是下面的代码:
const page = await browser.newPage();
await page.goto("https://news.ycombinator.com/");
let urls = await page.evaluate(() => {
var item = document.evaluate(
'//a[@class="storylink"]',
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
return item
})
browser.close();
returns 空对象:{}
。同样的情况也发生在其他所有网站上。
为什么会这样?
如果您使用来自 Node.js 的 Puppeteer 自动 Chrome,那么您已经公开的 page
对象的 $x
方法用于 XPath 评估,请参阅 https://pptr.dev/#?product=Puppeteer&version=v10.4.0&show=api-pagexexpression.这意味着做
let urls = await page.$x('//a[@class="storylink"]')
应该足够了。