欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

node puppeteer(headless chrome)實(shí)現(xiàn)網(wǎng)站登錄

 更新時(shí)間:2018年05月09日 14:22:33   作者:nobody-junior  
這篇文章主要介紹了node puppeteer(headless chrome)實(shí)現(xiàn)網(wǎng)站登錄,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

puppeteer簡(jiǎn)介

puppeteer是Chrome團(tuán)隊(duì)開發(fā)的一個(gè)node庫(kù),可以通過(guò)api來(lái)控制瀏覽器的行為,比如點(diǎn)擊,跳轉(zhuǎn),刷新,在控制臺(tái)執(zhí)行js腳本等等。有了這個(gè)神器,寫個(gè)爬蟲,自動(dòng)簽到,網(wǎng)頁(yè)截圖,生成pdf,自動(dòng)化測(cè)試什么的,都不在話下。

puppeteer的簡(jiǎn)單例子

代碼來(lái)自官網(wǎng):

const puppeteer = require('puppeteer');
 
(async () => {
 const browser = await puppeteer.launch();//打開瀏覽器
 const page = await browser.newPage();//打開一個(gè)空白頁(yè)
 await page.goto('https://example.com');//在地址欄輸入網(wǎng)址并等待加載
 await page.screenshot({path: 'example.png'});//截個(gè)圖
 
 await browser.close();//關(guān)掉瀏覽器
})();

閱讀上述代碼,我們可以發(fā)現(xiàn),1,代碼中每一步都是異步操作,2,每一步操作都對(duì)應(yīng)實(shí)際使用瀏覽器的一個(gè)行為。理解這兩點(diǎn)對(duì)使用這個(gè)庫(kù)有很大幫助。另外,比較常用的兩個(gè)對(duì)象就是browser和page對(duì)象,對(duì)象上有一堆用來(lái)操作兩個(gè)對(duì)象的方法。接下來(lái),我們就寫一個(gè)登錄網(wǎng)站的小demo。

沒(méi)有驗(yàn)證碼的網(wǎng)站

對(duì)于沒(méi)有驗(yàn)證碼的網(wǎng)站,基本上就是輸入賬號(hào),輸入密碼,點(diǎn)擊登錄這三步,需要用到page對(duì)象的兩個(gè)方法:type用來(lái)在輸入框中輸入信息,click用來(lái)點(diǎn)擊登錄。下面以登錄豆瓣為例來(lái)舉個(gè)例子:

const puppeteer = require('puppeteer');
const account = `123456@qq.com`;
const password = `123456`;
(async () => {
 const browser = await puppeteer.launch();//打開瀏覽器
 const page = await browser.newPage();//打開一個(gè)空白頁(yè)
 await page.goto('https://www.douban.com/');//打開豆瓣網(wǎng)站
 await page.type('#form_email', account);  
 await page.type('#form_password', password);
 await page.click('.bn-submit');
 await page.waitForNavigation({
  waitUntil: 'load'
 });//等待頁(yè)面加載出來(lái),等同于window.onload
 await page.screenshot({path: 'example.png'});//截個(gè)圖
 await browser.close();//關(guān)掉瀏覽器
})();

有人說(shuō),我怎么知道到底有沒(méi)有登錄成功呢,一種調(diào)試的辦法就是使用screenshot,如果你看到的是一個(gè)驗(yàn)證碼頁(yè)面,說(shuō)明沒(méi)有登錄成功,還有一種辦法像下面這樣:

const browser = await puppeteer.launch({headless: false});//打開有界面的瀏覽器

傳入headless:false后會(huì)真的打開一個(gè)瀏覽器的界面,這樣你就可以實(shí)時(shí)看到代碼執(zhí)行到什么地方了。接下來(lái)我們說(shuō)說(shuō)碰到驗(yàn)證碼時(shí)怎么辦。

有驗(yàn)證碼的網(wǎng)站

碰到有驗(yàn)證碼的網(wǎng)站,可以將headless設(shè)成false,借助界面輸入驗(yàn)證碼,同時(shí)監(jiān)聽(tīng)頁(yè)面加載事件,實(shí)現(xiàn)登錄,代碼如下:

...

 await page.waitForNavigation({
  waitUntil: 'load'
 });//等待頁(yè)面加載出來(lái),等同于window.onload


//代碼中監(jiān)聽(tīng)跳轉(zhuǎn)事件
if(page.url() === 'https://www.douban.com/accounts/login'){ 
   //登錄不成功
  console.log('需要輸入驗(yàn)證碼');
  //等待再一次跳轉(zhuǎn)
  while(true){
    await page.waitForNavigation({
      waitUntil: 'load'
    })
    console.log(page.url())
    if(page.url() === 'https://www.douban.com/'){
      console.log('登錄成功');
      break;
    }
  }
 }

整體思路就是寫也個(gè)循環(huán),不斷監(jiān)聽(tīng)頁(yè)面跳轉(zhuǎn),直到瀏覽器登錄成功后跳轉(zhuǎn)到首頁(yè)為止。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Nodejs使用mysql2操作數(shù)據(jù)庫(kù)的方法完整講解

    Nodejs使用mysql2操作數(shù)據(jù)庫(kù)的方法完整講解

    MySQL2是一個(gè)基于Node.js的MySQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,它是MySQL官方推薦的驅(qū)動(dòng)之一,下面這篇文章主要給大家介紹了關(guān)于Nodejs使用mysql2操作數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • 使用GruntJS構(gòu)建Web程序之Tasks(任務(wù))篇

    使用GruntJS構(gòu)建Web程序之Tasks(任務(wù))篇

    任務(wù)(Tasks)是grunt的核心概念,你所做的很多工作比如資源合并(concat)、壓縮(uglify)都是在配置任務(wù)。 每次grunt運(yùn)行的時(shí)候,你指定的一個(gè)或多個(gè)任務(wù)也在運(yùn)行,如果你沒(méi)有指定任務(wù),那么一個(gè)默認(rèn)名為“default”的任務(wù)將自動(dòng)運(yùn)行。
    2014-06-06
  • mac中利用NVM管理不同node版本的方法詳解

    mac中利用NVM管理不同node版本的方法詳解

    這篇文章主要給大家介紹了關(guān)于在mac中利用NVM管理不同node版本的相關(guān)資料,文中詳細(xì)介紹了nvm的安裝和卸載、nvm安裝node的方法,以及nvm如何管理node版本,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • nodejs實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼功能

    nodejs實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼功能

    這篇文章主要為大家詳細(xì)介紹了nodejs實(shí)現(xiàn)發(fā)送郵箱驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 詳解Node.js中exports和module.exports的區(qū)別

    詳解Node.js中exports和module.exports的區(qū)別

    這篇文章主要介紹了詳解Node.js中exports和module.exports的區(qū)別,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • node中IO以及定時(shí)器優(yōu)先級(jí)詳解

    node中IO以及定時(shí)器優(yōu)先級(jí)詳解

    這篇文章主要給大家介紹了關(guān)于node中IO以及定時(shí)器優(yōu)先級(jí)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Node.js中的模塊機(jī)制學(xué)習(xí)筆記

    Node.js中的模塊機(jī)制學(xué)習(xí)筆記

    這篇文章主要介紹了Node.js中的模塊機(jī)制學(xué)習(xí)筆記,本文講解了CommonJS模塊規(guī)范、Node模塊實(shí)現(xiàn)過(guò)程、模塊調(diào)用棧、包與NPM等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • nodejs獲取本機(jī)內(nèi)網(wǎng)和外網(wǎng)ip地址的實(shí)現(xiàn)代碼

    nodejs獲取本機(jī)內(nèi)網(wǎng)和外網(wǎng)ip地址的實(shí)現(xiàn)代碼

    這篇文章主要介紹了nodejs獲取本機(jī)內(nèi)網(wǎng)和外網(wǎng)ip地址的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-06-06
  • node實(shí)現(xiàn)分片下載的示例代碼

    node實(shí)現(xiàn)分片下載的示例代碼

    這篇文章主要介紹了node實(shí)現(xiàn)分片下載的示例代碼,使用場(chǎng)景包括基于瀏覽器的流文件片段傳輸、基于客戶端的分片下載等。感興趣的小伙伴們可以參考一下
    2018-10-10
  • Node.js實(shí)現(xiàn)http請(qǐng)求服務(wù)與Mysql數(shù)據(jù)庫(kù)操作方法詳解

    Node.js實(shí)現(xiàn)http請(qǐng)求服務(wù)與Mysql數(shù)據(jù)庫(kù)操作方法詳解

    這篇文章主要介紹了Node.js實(shí)現(xiàn)http請(qǐng)求服務(wù)與Mysql數(shù)據(jù)庫(kù)操作方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10

最新評(píng)論