爬蟲應(yīng)用示例--puppeteer數(shù)據(jù)抓取的實(shí)現(xiàn)方法(續(xù)2)

本文是“爬蟲應(yīng)用示例--puppeteer數(shù)據(jù)抓取的實(shí)現(xiàn)方法(續(xù)1)”的后續(xù),主要講解了常用的幾個(gè)自動化操作實(shí)現(xiàn)方法。

1、打開瀏覽器

await puppeteer.launch({
? ? ?ignoreHTTPSErrors:true,? //是否在導(dǎo)航期間忽略 HTTPS 錯(cuò)誤. 默認(rèn)是?false
? ? ? headless:false,? ?// 是否以無頭模式運(yùn)行瀏覽器,默認(rèn)是?true
? ? ? slowMo:250,? // 將 Puppeteer 操作減少指定的毫秒數(shù)。這樣你就可以看清發(fā)生了什么。在開發(fā)階段使用此屬性,在生產(chǎn)階段,注銷此屬性,這樣可以提高軟件的執(zhí)行效率
? ? ? timeout:0? ?// 等待瀏覽器實(shí)例啟動的最長時(shí)間(以毫秒為單位),0是禁止超時(shí)
?})

以上語句實(shí)際上是創(chuàng)建一個(gè)瀏覽器的實(shí)例,一般配置以上4個(gè)參數(shù)足夠了,具體如果還需要指定更多的創(chuàng)建方式,可以參見這里。

如果希望異步操作,則可以去掉await。

2、自動打開指定網(wǎng)頁

創(chuàng)建瀏覽器實(shí)例實(shí)際上是一個(gè)promise,成功后才可以執(zhí)行自動打開指定網(wǎng)頁等以下命令。

await puppeteer.launch({
。。。。。。
}).then(async browser => {
。。。。。
? ? ?let page = await browser.newPage();? ? ?//在打開的瀏覽器中新建一個(gè)標(biāo)簽
? ? ?await page.setJavaScriptEnabled(true); //允許js腳本
? ? ?await page.goto("https://www.baidu.com/");? //打開百度首頁
。。。。。
});

3、自動填寫輸入框

const obj_input = await page.$("#txtCompanyName");? ? //找到id=txtCompanyName的input輸入框
await obj_ input .focus();? ? ? ? ? ? //使該輸入框獲得焦點(diǎn)
await page.keyboard.type("華為");? ?//自動在該輸入框內(nèi)填寫華為兩個(gè)字

以上是根據(jù)id定位輸入框的,也可以用坐標(biāo)、classname等更多方法定位。

4、自動在下拉框中選擇指定項(xiàng)

await page.waitFor('#drpQualificateLevel');? //id= drpQualificateLevel的select組件中數(shù)據(jù)全部加載完畢
await page.select('#drpQualificateLevel','11');? //自動選擇該select中value=11的選擇項(xiàng)

5、自動點(diǎn)擊指定命令按鈕

let btnSearch = await page.$("#btnSearch");? ? //找到id=btnSearch的命令按鈕
await btnSearch.click();? ? //自動單擊該命令按鈕
await page.waitForNavigation() ; //確保以上單擊事件執(zhí)行完成,這個(gè)語句如果沒有,在單擊命令刷新頁面時(shí),后續(xù)獲取數(shù)據(jù)可能取不到,或者獲取不完整

6、自動提取表格中的數(shù)據(jù)

await page.waitFor('#dgDwList');? ? //等待id=dgDwList的table中的數(shù)據(jù)全部加載完畢
let data1 = await page.$$eval('#dgDwList tr', tds => tds.map((tr) => { return tr.innerText.split('\t'); })); //將table中數(shù)據(jù)全部提取出來放到變量data1中

7、自動點(diǎn)擊指定超級鏈接

let btnNext = await page.$("#btnNext");? ?//定位id= btnNext的超級鏈接<a id='btnNext' .....? />
await btnNext.click();? ?//自動點(diǎn)擊該超級鏈接
await page.waitForNavigation() ;? ?//確保頁面刷新完成

這個(gè)命令await page.$eval("#btnNext",obj => obj.href);可以獲取超級鏈接的href值。

8、自動關(guān)閉瀏覽器

await browser.close();

puppeteer功能非常強(qiáng)大,以此為基礎(chǔ)實(shí)現(xiàn)一個(gè)RPA,可以滿足大部分的自動化要求。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容