page.evaluate中的puppeteer引用错误

时间:2018-04-19 16:06:44

标签: javascript node.js web-scraping puppeteer

嗨我正在学习木偶无头浏览器,但有些东西我不明白

1)为什么我不能将变量用作选择器?

这是有效的

  const lastUpdate = await page.evaluate(() => document.querySelector('body > table > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child(3) > td:nth-child(2) > strong').textContent);

但这给了我参考错误LAST_UPDATE SELECTOR未定义

const LAST_UPDATE_SELECTOR = 'body > table > tbody > tr:nth-child(2) > td > table > tbody > tr:nth-child(3) > td:nth-child(2) > strong';
const lastUpdate = await page.evaluate(() => document.querySelector(LAST_UPDATE_SELECTOR).textContent);

我做错了什么?也许有一些我需要学习的东西

谢谢!

2 个答案:

答案 0 :(得分:5)

将变量作为参数传递给evaluate函数。

const selector = '#someSelector';

// 2. read the passed data
const lastUpdate = await page.evaluate((selector) => { 

  // 3. use it here
  document.querySelector(selector).textContent, 

// 1. Pass it here
}, selector); 

发生了什么事?

.evaluate接受两个参数pageFunction,其余参数序列化args。当运行pageFunction时,它将参数传递给它,然后它在浏览器上下文中变为可用。

在木偶操作员API docs上了解详情。

答案 1 :(得分:-1)

你不能使用变量作为选择器,因为它必须是一个String,即一个带有有效CSS选择器的DOMString,如.querySelector(" #main,#basic,#exclamation")否则你会收到一个错误。