【问题标题】:Puppeteer identifier string variable won't parse; Unsure whyPuppeteer 标识符字符串变量不会解析;不确定为什么
【发布时间】:2020-04-20 03:31:56
【问题描述】:

我正在尝试在 puppeteer 字符串中使用一个字符串,但由于某种原因它不起作用。

特别是这段代码

await page.waitForSelector('div[class = "sh-dlr__list-result"')

当我尝试解析变量时

let identified1 = 'div[class = "sh-dlr__list-result"'

就这样

await page.waitForSelector(identified1)

这行不通。这真的是限制,有没有办法解决这个问题?

这是扩展代码

https://jsfiddle.net/hewlbern/6p7kdozt/10/ 在您的计算机上运行它,jsfiddle 不确定我是否可以从那里运行它。

我相信它现在正在创建一个 cors 错误 - 非常奇怪!为什么使用变量会产生 cors 错误:/

谢谢!

【问题讨论】:

  • 你确定它在没有变量的情况下有效吗?
  • 是的 - 可能与木偶师有关
  • 那是不可能的,你能分享你的其余代码吗?你到底在哪里声明了那个变量,这样我们就可以看到发生了什么?您也可以在 await page.waitForSelector(identified1) 之前记录 identified1 的值以进行完整性检查
  • 好主意!我将列出其余代码:)
  • 但这没有任何意义 - 为什么将其设为 const 会导致 cors 问题

标签: javascript dom web-scraping puppeteer


【解决方案1】:

原因是因为您在page.evaluate() 中声明了identified。因此,当您执行以下操作时,它已经超出了范围。

if (currentPage < pagesToScrape) {
  console.log(identified1);
  await Promise.all([
    await page.click(buttonSelector),
    await page.waitForSelector(identified),
  ]);
}

您确实记录了identified1,但您使用identified 作为选择器。

您必须像这样将identifier2 传递给pageFunction

let newProducts = await page.evaluate(({ identifier2 }) => {
  // ...
},{ identifier2 });

See here 一些例子:

【讨论】:

  • 太棒了。如果我想做逻辑运算符来获得正确的标识符,无论查询如何(所以它自己解决),我将如何测试它而不是在 page.evaluate 中?
  • 再次更新示例以更好地解释。本质上,我想允许不同类型的选择器,并能够解析正确的选择器。 :)
  • 很难进一步帮助您,jsfiddle 无法正常工作,我不确定我是否完全理解您要做什么。我认为关键的一点是,如果你想在page.evaluate() 中使用一个变量,你必须将它传递给pageFunction。看看this 是否有帮助。
  • 感谢您的回答。如果可能的话,把要点记下来。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
相关资源
最近更新 更多