puppetter 是谷歌出的一個(gè)無(wú)頭瀏覽器,可以用來(lái)寫e2e單元測(cè)試,本文用來(lái)爬取美女圖片。哈哈,其實(shí)爬取簡(jiǎn)單,上傳cdn吃了好大的苦,阿里的oss上傳小視頻(豆瓣的預(yù)告片)一直給報(bào)錯(cuò)(用put,buffer,stream都試過(guò),最后才發(fā)現(xiàn)是oss的超時(shí)時(shí)間是nodejs控制的,我一直以為是oss那邊控制了超時(shí)時(shí)間6000ms)
獻(xiàn)上我爬取的最好的一張美女圖片

beauty gril
async function getWelfareImage (url) {
// 返回解析為Promise的瀏覽器
const browser = await puppeteer.launch()
// 返回新的頁(yè)面對(duì)象
const page = await browser.newPage()
// 頁(yè)面對(duì)象訪問對(duì)應(yīng)的url地址
await page.goto(url, {
waitUntil: 'networkidle2'
})
// 等待3000ms,等待瀏覽器的加載
await sleep(1000)
// 可以在page.evaluate的回調(diào)函數(shù)中訪問瀏覽器對(duì)象,可以進(jìn)行DOM操作
const urls = await page.evaluate(() => {
let ol = document.getElementsByClassName('commentlist')[0]
let imgs = ol.getElementsByTagName('img')
let url = []
for (let i = 0; i < imgs.length; i++) {
url.push(imgs[i].getAttribute("src"))
}
// 返回所有美女圖的url地址數(shù)組
return url
})
const store = oss(config.ossconfig)
for (let i = 0; i < urls.length; i++) {
// request-promise,返回一個(gè)buffer對(duì)象
let fetchResult = await rp({url:urls[i], encoding:null});
// 通過(guò)buffer的方式上傳到cdn
await store.put(`beauty/cp-${path.basename(urls[i])}`, fetchResult);
}
// 關(guān)閉無(wú)頭瀏覽器
await browser.close()
}
getWelfareImage('http://jandan.net/ooxx')
cdn地址:http://iuap-tenat-market.oss-cn-beijing.aliyuncs.com/beauty/cp-0076BSS5ly1fw6wbx5318j30hs0qognc.jpg
注意:
在new oss()傳入的對(duì)象中需重新改寫超時(shí)時(shí)間agent、timeout,具體的可以看oss中源碼。
{
accessKeyId: '***',
accessKeySecret: '***',
bucket: '***',
region: 'oss-cn-beijing',
agent: new AgentKeepAlive({
timeout: '30m',
}),
timeout: '30m'
}
同時(shí),也做了一個(gè)node cli 上傳cdn的工具包(ac-tools cdn),cdn功能只是其中一個(gè)。
鏈接地址 ac-tools