最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node使用Selenium進(jìn)行前端自動化操作的代碼實現(xiàn)

 更新時間:2019年10月10日 08:30:53   作者:飯等米  
這篇文章主要介紹了Node使用Selenium進(jìn)行前端自動化操作的代碼實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言:

最近項目中有類似的需求:需要對前端項目中某一個用戶下的產(chǎn)品數(shù)據(jù)進(jìn)行批量的處理。手動處理的流程大概是首先登錄系統(tǒng),獲取到當(dāng)前用戶下的產(chǎn)品列表,點擊產(chǎn)品列表的中產(chǎn)品項進(jìn)入詳情頁,對該產(chǎn)品進(jìn)行一系列的操作,然后保存退出。因為當(dāng)前有20多萬條數(shù)據(jù),手動一條一條的處理不太現(xiàn)實,所以希望通過寫腳本的方式來進(jìn)行處理。

需求分析

其實這個需求還算比較簡單,需要實現(xiàn)的點主要有三個,一是如何進(jìn)行登錄,獲取登錄信息,查詢當(dāng)前用戶下的產(chǎn)品數(shù)據(jù);二是如何知道當(dāng)前數(shù)據(jù)是否處理完,然后退出當(dāng)前的處理流程;三是如何異步的處理一批數(shù)據(jù)。

所以需要做的工作就是模擬登錄,調(diào)用產(chǎn)品列表的查詢接口獲取產(chǎn)品ID集合,然后循環(huán)遍歷當(dāng)前的集合,通過產(chǎn)品ID跳轉(zhuǎn)產(chǎn)品詳情頁面,模擬頁面按鈕的點擊操作,監(jiān)聽處理完成的動作,退出當(dāng)前的流程。

Selenium 介紹

What is Selenium?
Selenium automates browsers. That's it! What you do with that power is entirely up to you. Primarily, it is for automating web applications for testing purposes, but is certainly not limited to just that. Boring web-based administration tasks can (and should!) be automated as well.
Selenium has the support of some of the largest browser vendors who have taken (or are taking) steps to make Selenium a native part of their browser. It is also the core technology in countless other browser automation tools, APIs and frameworks.

翻譯過來大致意思就是: Selenium 可以自動化操作瀏覽器。怎么去使用Selenium 的功能完全取決于我們自己。它主要還是使用在web應(yīng)用的自動化測試上。但是他的功能并不僅限于此。那些枯燥的基于web的管理任務(wù)也可以自動化。很多流行的瀏覽器都采取了一些措施來支持Selenium實現(xiàn)本地化。它也是很多瀏覽器自動化工具、API自動化以及框架的核心技術(shù)。

Selenium 主要分 Selenium WebDriver 以及 Selenium IDE。我主要結(jié)合Node來介紹 Selenium WebDriver 的安裝使用。本文主要介紹Selenium 結(jié)合 Node 的安裝使用。需要進(jìn)行深入研究的同學(xué)請自行查看官網(wǎng)文檔。

Node 環(huán)境搭建

1. node的安裝在此不再贅述。點擊鏈接查看官網(wǎng)下載安裝方法。
2. express安裝

$ npx express-generator

或者

$ npm install -g express-generator

創(chuàng)建項目:

$ express --view=ejs selenium-start
$ cd selenium-start
$ yarn

啟動項目:

$ DEBUG=myapp:* yarn start

至此,Node 項目創(chuàng)建完畢。接下來我們就可以在項目中集成Selenium WebDriver

Selenium WebDriver 集成

1. 安裝selenium-webdriver

yarn add selenium-webdriver

2. 下載安裝支持不同瀏覽器的驅(qū)動。(此處只介紹Chrome驅(qū)動)

[ChromeDriver][3]
下載并解壓文件,同時把解壓的執(zhí)行文件放置到 /usr/bin目錄下?;蛘咴O(shè)置相應(yīng)的PATH路徑,確??蓤?zhí)行文件在PATH路徑中。

開始使用

進(jìn)入我們剛才創(chuàng)建的項目文件夾,目錄如下:

頁面添加一個開始按鈕,以及給按鈕添加事件。

找到 views/index.ejs, 添加如下代碼:(為了方便操作,引入了jquery, axios, 所以需要下載準(zhǔn)備好)

添加對應(yīng)的路由

在app.js文件中,引入路由chromeDriver

 var chromeDriverRouter = require('./routes/chromeDriver');
 app.use('/chromeDriver', chromeDriverRouter);

引入selenium-webdriver

在routes/chromeDirver.js文件中,我們添加了一個方法handleBaiDuDriver,這個方法用于處理模擬百度搜索自動化的一些測試。

首先我們需要在文件頂部引入selenium-webdriver

 const {Builder, By, Key, until} = require('selenium-webdriver');

 // Builder: 用于創(chuàng)建一個WebDriver實例。
 // By: 表示通過什么方式來查找頁面的元素。
   // By.className( name ) → By
   // By.css( selector ) → By
   // By.id( id ) → By
   // By.js( script, ...var_args ) → function(WebDriver): Promise
   // By.linkText( text ) → By
   // By.name( name ) → By
   // By.partialLinkText( text ) → By
 // Key: 表示鍵盤上一系列的按鍵。
 // until: 定義了一些工具類的方法。

然后書寫我們的方法體里的內(nèi)容。

const handleBaiDuDriver = async () => {
   let driver = await new Builder().forBrowser('chrome').build();
   try {
     await driver.get('http://www.baidu.com');
 
     await driver.findElement(By.id('kw')).sendKeys('webdriver', Key.RETURN);//正常使用
 
     await driver.findElement(By.id('su')).click();
 
     await driver.wait(until.titleIs('百度一下,你就知道'), 1000);
     
   } catch (error) {
     console.log(error)
   } finally {
     await driver.sleep(2000);
     await driver.quit();
   }
 }

啟動服務(wù),查看效果。

啟動服務(wù)之后,我夢能看到如下的界面。


點擊頁面中的【點擊開始】按鈕,最終能夠看到如下的界面,為了演示我做了兩秒的延遲。生成的gif圖有9M多,無法上傳。后續(xù)可以下載源碼運(yùn)行看效果。

獲取登錄信息

以上是selenium-webdriver的簡單集成。在之前我們提到過實際需求中如何獲取登錄信息的問題。在訪問產(chǎn)品列表頁面的時候需要進(jìn)行登錄校驗。如果沒有登錄則會跳轉(zhuǎn)界面。由于我們的登錄頁是通過iframe來嵌套引入的。由于暫時還沒有了解如何處理iframe里的操作,所以沒法去模擬用戶名密碼的輸入。

查看API文檔,WebDriver 會有一個manage方法:

this.manage() → Options

該方法會返回一個Options實例,具有如下的方法:


其中有對cookie的操作方法。所以可以通過首次輸入用戶信息并進(jìn)行緩存的方式來實現(xiàn)登錄態(tài)的保存。在下一次再打開頁面的時候直接從緩存里獲取cookie信息,并通過addCookie方法進(jìn)行cookie的設(shè)置。但是由于我不知道什么時候、多長時間登錄才會成功,所以在獲取cookie的時候需要通過不斷循環(huán)的方式去獲取,直到拿到cookie。當(dāng)然可以設(shè)置一個超時時間。超時之后就退出當(dāng)前driver。

 
 // 緩存cookie
 async function setCookies(driver) {
   const manage = driver.manage();
   let sleepTime = 6000;
   await driver.sleep(sleepTime);
   let cookies = null
   try {
     cookies = await manage.getCookies();  
   } catch (error) {
   }
   while (!cookies || !findSessionIdFromCookies(cookies)) {
     await driver.sleep(2000)
     sleepTime += 2000;
     try {
       cookies = await manage.getCookies();
     } catch (error) {
     }
   }
   if (cookies && findSessionIdFromCookies(cookies)) {
     cache.cookies = cookies; // cache是全局用于緩存cookie的對象
     cache.cookiesStr = cache.cookies.map((cookie) => {
       return `${cookie.name}=${cookie.value}`
     }).join(';');
   }
   return cookies;
 }
 
 
 // 設(shè)置cookie
 async function initCookies(driver) {
   const cookies = cache.cookies;
   if (cookies && cookies.length > 0) {
     await driver.manage().deleteAllCookies();
     for (let i = 0 ; i < cookies.length; i++) {
       cookie = cookies[i];
       await driver.manage().addCookie(cookie);    
     };
   }
 }

獲取到cookie 信息之后就可以請求產(chǎn)品列表以及通過產(chǎn)品ID進(jìn)入產(chǎn)品詳情頁。然后再模擬頁面按鈕點擊操作即可。

Github地址

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

相關(guān)文章

  • Angularjs---項目搭建圖文教程

    Angularjs---項目搭建圖文教程

    下面小編就為大家?guī)硪黄狝ngularjs---項目搭建圖文教程。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • NPM 安裝cordova時警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to

    NPM 安裝cordova時警告:npm WARN deprecated minimatch@2.0.10: Pleas

    這篇文章主要介紹了NPM 安裝cordova時警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • 垃圾回收器的相關(guān)知識點總結(jié)

    垃圾回收器的相關(guān)知識點總結(jié)

    本文是小編在網(wǎng)絡(luò)上整理的關(guān)于垃圾回收器的相關(guān)知識點,很多語言和程序都用的到,有興趣的可以學(xué)習(xí)下。
    2018-05-05
  • node.js文件系統(tǒng)之文件寫入實例詳解

    node.js文件系統(tǒng)之文件寫入實例詳解

    Node.js和其他語言一樣,也有文件操作,下面這篇文章主要給大家介紹了關(guān)于node.js文件系統(tǒng)之文件寫入的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • Node.js常用三大模塊之path模塊

    Node.js常用三大模塊之path模塊

    在node.js中常用的三大模塊中還有一個是path模塊,主要是為了便利用戶處理路徑問題,如果我們在引入文件的時候經(jīng)常會受到../和./的干擾,那么這個path模塊將會很好的幫助你
    2022-09-09
  • 使用nvm安裝node?v12.22.12時遇到的問題解決

    使用nvm安裝node?v12.22.12時遇到的問題解決

    本文介紹了使用nvm安裝node?v12.22.12時遇到的問題解決,解決了上手動下載和安裝npm以解決版本不匹配的問題,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • node.js卸載與安裝超詳細(xì)步驟記錄

    node.js卸載與安裝超詳細(xì)步驟記錄

    這篇文章主要介紹了如何卸載和重新安裝Node.js,包括卸載步驟、刪除相關(guān)文件、修改系統(tǒng)環(huán)境變量,以及安裝步驟、驗證安裝和配置環(huán)境變量,需要的朋友可以參考下
    2025-02-02
  • 用Electron寫個帶界面的nodejs爬蟲的實現(xiàn)方法

    用Electron寫個帶界面的nodejs爬蟲的實現(xiàn)方法

    這篇文章主要介紹了用Electron寫個帶界面的nodejs爬蟲的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • node.js基礎(chǔ)知識匯總

    node.js基礎(chǔ)知識匯總

    這篇文章主要介紹了node.js基礎(chǔ)知識,幫助大家更好的理解和學(xué)習(xí)node.js,感興趣的朋友可以了解下
    2020-08-08
  • 利用npm 安裝刪除模塊的方法

    利用npm 安裝刪除模塊的方法

    今天小編就為大家分享一篇利用npm 安裝刪除模塊的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論

武宁县| 周至县| 石阡县| 浦县| 屯门区| 报价| 化州市| 高淳县| 萨嘎县| 扬州市| 都江堰市| 东源县| 延寿县| 平果县| 中江县| 张北县| 定西市| 泰来县| 阿勒泰市| 射阳县| 大兴区| 斗六市| 马鞍山市| 河源市| 乐业县| 新余市| 滦南县| 渭南市| 无棣县| 宜城市| 揭阳市| 江陵县| 乐安县| 方正县| 靖西县| 永和县| 双牌县| 长泰县| 滦平县| 民县| 顺义区|