有div =" xj7" 在此之下,有一个a = href链接。
如何访问链接的值?甚至更棘手的是,有许多具有相同类名的元素 - 所以理想情况下我想循环遍历它们。
另一个障碍是链接是相对的形式。这意味着它没有指定域名。就像这样:
<div class="xj7">
<a href="/tst/gfhe7sje">
答案 0 :(得分:1)
试试这个并告诉我它是否有效。
async function run(){
await page.goto('<url_here>');
let div_selector= "div.xj7.Kwh5n";
let list_length = await page.evaluate((sel) => {
let elements = Array.from(document.querySelectorAll(sel));
return elements.length;
}, div_selector);
for(let i=0; i< list_length; i++){
var href = await page.evaluate((l, sel) => {
let elements= Array.from(document.querySelectorAll(sel));
let anchor = elements[l].getElementsByTagName('a')[0];
if(anchor){
return anchor.href;
}else{
return '';
}
}, i, div_selector);
console.log('--------> ', href)
}
await browser.close();
}
run();
答案 1 :(得分:1)
你可以这样做:
const crawl = async (url) => {
try {
console.log(`Crawling ${url}`)
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto(url)
const selector = '.xj7 > a'
await page.waitForSelector(selector)
const links = await page.$$eval(selector, am => am.filter(e => e.href).map(e => e.href))
console.log(links)
await browser.close()
} catch (err) {
console.log(err)
}
}
crawl('https://example.com')