我想知道是否有一个元素存在于我正在与木偶手擦拭的页面上。我在这个函数中使用了这段代码,但是它不起作用:
let build = await page.evaluate(() =>{
let rune = document.querySelector('#selector') == null ? false : document.querySelector('#selector').src
return rune;
})
它总是返回false,即使元素存在并且应该返回true。
发布于 2020-06-07 02:42:46
您应该在异步中调用等待函数。它可能在加载之前调用函数。
(async () => {
let build = await page.evaluate(() =>{
let rune = document.querySelector('#selector') == null ? false : document.querySelector('#selector').src
return rune;
})
})();
发布于 2020-06-07 04:24:50
您的代码似乎正常工作。
完整示例中的:
const puppeteer = require('puppeteer')
async function fn() {
const browser = await puppeteer.launch({ headless: false, waituntil: 'domcontentloaded' })
const page = await browser.newPage()
await page.goto('http://example.com/')
try {
let build = await page.evaluate(() => {
let rune = document.querySelector('h1') === null ? false : document.querySelector('h1').textContent
return rune
})
console.log(build)
} catch (e) {
console.error(e)
}
await browser.close()
}
fn()
注意:如果您想检查是否正确,最好在三元中使用严格的相等操作。
输出:
Example Domain
您可能有一个页面,它需要时间来加载所需的元素。,您可以强迫它在await page.waitFor(5000) // in ms
中等待。因此,您的脚本不需要等待特定的选择器(如page.waitForselector('#selector')
),如果元素不存在,脚本也不会失败。
另一种可能更适合于这类使用的方法:
if ((await page.$('h1')) !== null) {
// do things with its content
} else {
// do something else
}
https://stackoverflow.com/questions/62243916
复制