我正在与Node.js and 傀儡师第一次,找不到输出值的方法page.evaluate
到外部范围。
我的算法:
- Login
- Open URL
- Get
ul
- 循环每个
li
然后点击它
- 等待
innetHTML
要设置并添加它的src
内容到数组。
我怎样才能返回数据page.evaluate()
?
const puppeteer = require('puppeteer');
const CREDENTIALS = require(`./env.js`).credentials;
const SELECTORS = require(`./env.js`).selectors;
const URLS = require(`./env.js`).urls;
async function run() {
try {
const urls = [];
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto(URLS.login, {waitUntil: 'networkidle0'});
await page.type(SELECTORS.username, CREDENTIALS.username);
await page.type(SELECTORS.password, CREDENTIALS.password);
await page.click(SELECTORS.submit);
await page.waitForNavigation({waitUntil: 'networkidle0'});
await page.goto(URLS.course, {waitUntil: 'networkidle0'});
const nodes = await page.evaluate(selector => {
let elements = document.querySelector(selector).childNodes;
console.log('elements', elements);
return Promise.resolve(elements ? elements : null);
}, SELECTORS.list);
const links = await page.evaluate((urls, nodes, VIDEO) => {
return Array.from(nodes).forEach((node) => {
node.click();
return Promise.resolve(urls.push(document.querySelector(VIDEO).getAttribute('src')));
})
}, urls, nodes, SELECTORS.video);
const output = await links;
} catch (err) {
console.error('err:', err);
}
}
run();
功能page.evaluate() https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pageevaluatepagefunction-args只能返回一个可序列化 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description值,因此不可能返回元素或NodeList
使用此方法从页面环境返回。
您可以使用page.$$() https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pageselector-1而是为了获得ElementHandle https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-elementhandle array:
const nodes = await page.$$(`${selector} > *`); // selector children
If the length
常数的nodes
is 0
,然后确保您正在等待选择器指定的元素被添加到 DOMpage.waitForSelector() https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagewaitforselectorselector-options:
await page.waitForSelector(selector);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)