最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

点击元素上的木偶戏后载入页面

IT培训 admin 13浏览 0评论

点击元素上的木偶戏后载入页面

我使用的木偶加载一个页面,我在这个页面渲染的元素的列表。每一个元素都可以点击,点击它会花费元素和更多的数据添加额外的元素。有点像恩手风琴。我怎样才能使它的工作?我试过几件事情,如:

async function getSite(url) {
  const browser = await puppeteer.launch();

  const page = await browser.newPage();
  await page.goto(url, { waitUntil: "networkidle0" });

  const parentElements = await page.$$(".feeditem");
  await Promise.all(parentElements.map(parentElement => parentElement.click()));

  await page.waitForFunction(
    parentNumber =>
      document.querySelectorAll(".accordion_opened").length === parentNumber,
    { timeout: 20000 },
    parentElements.length
  );

  await page.waitFor(5000);

  const elementsExtcArr = await page.evaluate(() => {
    let elements = Array.from(document.querySelectorAll(".accordion_opened"));
    const elementsExtc = elements.map(i => i.innerHTML);

    return elementsExtc;
  });

  console.log(elementsExtcArr);
  await browser.close();
}

getSite(url);

但这些都不不行。我仍然得到的页面,因为它是点击事件之前。任何想法?

回答如下:

你可以先试试这个:

const elements = await page.$$(".feeditem");
await Promise.all(elements.map(element => element.click()));

let site = await page.evaluate(
  () => document.querySelector("body").innerHTML
);

如果这没有帮助(比如,如果每个点击发送XHR请求,你需要等待更多),你可以添加page.waitForFunction(),就像这样:

const parentElements = await page.$$(".feeditem");
await Promise.all(parentElements.map(parentElement => parentElements.click()));

await page.waitForFunction(
  parentNumber => document.querySelectorAll('.accordion_opened').length === parentNumber,
  { timeout: 0 },
  parentElements.length
);

let site = await page.evaluate(
  () => document.querySelector("body").innerHTML
);

点击元素上的木偶戏后载入页面

我使用的木偶加载一个页面,我在这个页面渲染的元素的列表。每一个元素都可以点击,点击它会花费元素和更多的数据添加额外的元素。有点像恩手风琴。我怎样才能使它的工作?我试过几件事情,如:

async function getSite(url) {
  const browser = await puppeteer.launch();

  const page = await browser.newPage();
  await page.goto(url, { waitUntil: "networkidle0" });

  const parentElements = await page.$$(".feeditem");
  await Promise.all(parentElements.map(parentElement => parentElement.click()));

  await page.waitForFunction(
    parentNumber =>
      document.querySelectorAll(".accordion_opened").length === parentNumber,
    { timeout: 20000 },
    parentElements.length
  );

  await page.waitFor(5000);

  const elementsExtcArr = await page.evaluate(() => {
    let elements = Array.from(document.querySelectorAll(".accordion_opened"));
    const elementsExtc = elements.map(i => i.innerHTML);

    return elementsExtc;
  });

  console.log(elementsExtcArr);
  await browser.close();
}

getSite(url);

但这些都不不行。我仍然得到的页面,因为它是点击事件之前。任何想法?

回答如下:

你可以先试试这个:

const elements = await page.$$(".feeditem");
await Promise.all(elements.map(element => element.click()));

let site = await page.evaluate(
  () => document.querySelector("body").innerHTML
);

如果这没有帮助(比如,如果每个点击发送XHR请求,你需要等待更多),你可以添加page.waitForFunction(),就像这样:

const parentElements = await page.$$(".feeditem");
await Promise.all(parentElements.map(parentElement => parentElements.click()));

await page.waitForFunction(
  parentNumber => document.querySelectorAll('.accordion_opened').length === parentNumber,
  { timeout: 0 },
  parentElements.length
);

let site = await page.evaluate(
  () => document.querySelector("body").innerHTML
);
发布评论

评论列表 (0)

  1. 暂无评论