页面选择器在puppeteer中的奇怪行为

时间:2019-03-15 22:33:04

标签: javascript puppeteer

我正试图从要伪造的页面的DOM中获取一个元素。

页面加载后,我致电const arraySchemaOne = Joi.object({ dropdown: Joi.string().valid('Option 1') }).required(); const arraySchemaTwo = Joi.object({ dropdown: Joi.string().valid('Option 2') }).required(); this.validationPattern = Joi.object().pattern(/\w/, Joi.object( { rows: Joi.ref('rows.length >= 2') ? Joi.array().items([arraySchemaOne, arraySchemaTwo]) : Joi.array().items([arraySchemaOne]) } )); 。它返回page.$('.class-name')形式的一些奇怪对象。

当我从chrome控制台调用{ ClickTale: {} }时,我得到一个完全不同的对象,该对象与要查找的元素相对应。

我的目标是访问puppeteer中所述元素的href属性。谢谢

2 个答案:

答案 0 :(得分:1)

page.$(selector)document.querySelector不同,

  • 您在浏览器中运行querySelector,但在nodeJS上运行page.$
  • page.$根据结果返回ElementHandlenull。 querySelector返回一个Dom元素。

您可以使用$eval来获取所说元素的href。这将执行querySelector并评估结果。

page.$eval('.class-name', elem => elem.href) 

答案 1 :(得分:0)

我也是木偶游戏的新手,也经历过杰克。 我会在回复中得到一个ElementHandle JSHandle。 我设法使用getProperty提取了链接,但可能做错了。 对此的更好解释是here

let te_responce = await page[0].$$('div[class="supergrid-bucket"] > a')
  console.log(`Number of entries ${te_responce.length}`)

for (let i = 0; i < te_responce.length; i++) {
  console.log(`link ${await(await te_responce[i].getProperty('href')).jsonValue()}`)
}