木偶的麻烦。或至少是javascript麻烦;你决定,请

时间:2020-08-14 14:33:15

标签: javascript puppeteer

有人可以在这里解释可能出什么问题吗

Stack(
children: <Widget>[
  ListView(
    controller: scrollController,
    children: <Widget>[
      Container(
       child: Text('widget 1'),
      ),
      Container(
       child: Text('widget 2'),
      ),
      Container(
       child: Text('widget 3'),
      ),
     ],
    ),
    Image.asset('assets/myImage.png'),
 ],
),

我已经尝试过page.wait ....,但无济于事,同样的错误

错误

await page.click('some-selector-that-devtools-confirms-is-definitely-there')
let peeps = await page.evaluate(() =>
    {
        document.querySelector('some-selector-that-devtools-confirms-is-definitely-there')
    }
);
console.log('classes: '+peeps.classList)

顺便说一句,是否有最佳实践来找出元素是否具有特定的CSS类?

2 个答案:

答案 0 :(得分:1)

您在这里有两个问题。

  1. 您不会返回document.querySelector('some-selector-that-devtools-confirms-is-definitely-there'),因此变量peeps将是未定义的

  2. 您期望可以使用page.evaluate()返回任何值。但是请注意,您只能返回一个serializable值,因此无法使用此方法从页面环境中返回一个元素或NodeList

enter image description here


示例以classlist返回page.evaluate()

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto("https://google.com", { waitUntil: "networkidle2" });

  const classList = await page.evaluate(() => {
    return [...document.querySelector("div").classList];
  });

  console.log(classList);

  await browser.close();
})();

答案 1 :(得分:1)

您的代码有两个主要问题:

  • 您的evaluate方法未返回任何内容;
  • 您需要在classList方法内访问evaluate

这是一个例子:

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto("https://stackoverflow.com/");

  const classes = await page.evaluate(() => {
    return document.querySelector("body").classList;
  });

  console.log(classes);

  await browser.close();
})();

作为一种替代方法,您可以使用getProperty("className")

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto("https://stackoverflow.com/");

  const el = await page.$("body");
  const className = await el.getProperty("className");
  const classes = className._remoteObject.value.split(" ");

  console.log(classes);

  await browser.close();
})();
相关问题