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

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

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

puppeteer簡介

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

puppeteer的簡單例子

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

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

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

沒有驗證碼的網(wǎng)站

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

const puppeteer = require('puppeteer');
const account = `123456@qq.com`;
const password = `123456`;
(async () => {
 const browser = await puppeteer.launch();//打開瀏覽器
 const page = await browser.newPage();//打開一個空白頁
 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'
 });//等待頁面加載出來,等同于window.onload
 await page.screenshot({path: 'example.png'});//截個圖
 await browser.close();//關(guān)掉瀏覽器
})();

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

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

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

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

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

...

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


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

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

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

相關(guān)文章

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

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

    MySQL2是一個基于Node.js的MySQL數(shù)據(jù)庫驅(qū)動程序,它是MySQL官方推薦的驅(qū)動之一,下面這篇文章主要給大家介紹了關(guān)于Nodejs使用mysql2操作數(shù)據(jù)庫的相關(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)行的時候,你指定的一個或多個任務(wù)也在運(yùn)行,如果你沒有指定任務(wù),那么一個默認(rèn)名為“default”的任務(wù)將自動運(yùn)行。
    2014-06-06
  • mac中利用NVM管理不同node版本的方法詳解

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

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

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

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

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

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

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

    這篇文章主要給大家介紹了關(guān)于node中IO以及定時器優(yōu)先級的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用node具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(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模塊實現(xiàn)過程、模塊調(diào)用棧、包與NPM等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • nodejs獲取本機(jī)內(nèi)網(wǎng)和外網(wǎng)ip地址的實現(xiàn)代碼

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

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

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

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

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

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

最新評論