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