超級瀏覽器Webdriver自動化開發
一、概述
通過Webdriver實作對超級瀏覽器內的店鋪進行,自動化控制以及資料抓取,主要流程分為以下兩個部分
(一)與超級瀏覽器主行程通信,
這個部分是通過Socket實作與超級瀏覽器主進實作通訊的,主要作業是獲取店鋪串列以及準備店鋪環境,一個店鋪相當于一個獨立瀏覽器,
(二)通過Selenium API 啟動和控制超級瀏覽器內核
這個部分主要是由自動化程式開發者自行開發,需要自行了解Selenium API如何使用,啟動Selenium時有些引數依賴與超級瀏覽器主行程通訊的結果
二、互動時序圖

三、必要條件以及注意事項
(一)啟動超級瀏覽器主行程必要配置啟動引數
1、--run_type=web_driver
指定以Webdriver 模式運行主行程,本質是讓超級瀏覽器以無界面狀態運行,超級瀏覽器行程會自動保證行程唯一,所以多次啟動會自動放棄后啟動行程,但是手動點擊啟動的超級瀏覽器會Kill掉Webdriver 模式運行的行程
2、--socket_port=埠號
告訴超級瀏覽器雙方socket通訊埠是什么,超級瀏覽器會以該埠在127.0.0.1啟動一個socket服務端
(二)Socket通訊注意事項
1、每條Socket請求和回應資料必須以"\r\n"結尾
2、Socket請求內容和回傳結果都是通過JSON結構組織,收發訊息統一以UTF-8編碼
3、Socket請求的相應都是異步回傳的,可以并發執行,通過在請求引數里面添加一個全域唯一的requestId欄位來標識請求,該欄位會在回應內回傳
(三)其他注意事項
1、getBrowserEnvInfo回傳資料不能復用,每次都要重新呼叫,
2、需要根據運行設備的配置,適當控制同時啟動的店鋪瀏覽器視窗總個數,店鋪剛剛啟動時非常消耗CPU可以考慮錯開啟動,這個部分需要開發者自行調優,沒有明確的標準,
四、Socket介面說明
(一)Action : getBrowserList
1、說明:獲取店鋪串列
2、請求引數:
{
"userInfo": "{\"company\":\"公司\",\"username\":\"用戶名\",\"password\":\"密碼\"}",
"action": "getBrowserList",
"requestId": "全域唯一標識"
}
3、回應結果:
{
"statusCode": "狀態碼",
"err": "例外資訊",
"action": "getBrowserList",
"requestId": "全域唯一標識",
"browserList": [{
"browserOauth": "店鋪ID",
"browserName": "店鋪名稱",
"browserIp": "店鋪IP",
"siteId": "店鋪所屬站點",
"isExpired": false //ip是否過期
}]
}
4、狀態碼:
(1)0 : 成功
(2)-10000 : 未知例外
(3)-10002 : Socket引數非法
(4)-10003 : 登錄失敗
(5)-10004 : 獲取店鋪串列時服務器回傳例外
(二)Action : startBrowser
1、說明:啟動店鋪,關閉店鋪需要呼叫stopBrowser,連續兩次呼叫startBrowser會視為重啟
2、請求引數:
{
"userInfo": "{\"company\":\"公司\",\"username\":\"用戶名\",\"password\":\"密碼\"}",
"action": "startBrowser",
"browserOauth": "店鋪ID",
"isHeadless": true, //是否啟用無頭模式
"requestId": "全域唯一標識"
}
3、回應結果:
{
"statusCode": "狀態碼",
"err": "例外資訊",
"action": "startBrowser",
"browserOauth": "店鋪ID",
"requestId": "全域唯一標識",
"launcherPage": "店鋪所屬平臺的默認啟動頁面",
"debuggingPort": "除錯埠"
}
4、啟動Selenium 必要引數
//根據startBrowser回傳結果啟動Selenium
ChromeOptions options = new ChromeOptions();
//除錯埠
options.setExperimentalOption("debuggerAddress", "127.0.0.1:" + debuggingPort);
//洗掉其他不需要引數
5、狀態碼:
(1)0 : 成功
(2)-10000 : 未知例外
(3)-10001 : 內核視窗創建失敗
(4)-10002 : Socket引數非法
(5)-10003 : 登錄失敗
(6)-10004 : browserOauth缺失
(7)-10005 : 該店鋪上次請求的startBrowser還未執行結束
(8)大于零的狀態碼:
1 : 初始化資料失敗
2 : 檢測到當前IP無法正常使用,請聯系客服
4 : 初始化時區失敗
5 : 初始化代理失敗
6 : 初始化黑白名單
7 : 啟動內核失敗
8 : 初始化瀏覽器個人目錄
9 : 初始化Cookies失敗
11 : 初始化瀏覽器設定檔案
13 : 初始化代理資訊配置
(三)Action : stopBrowser
1、說明:關閉店鋪視窗
2、請求引數:
{
"userInfo": "{\"company\":\"公司\",\"username\":\"用戶名\",\"password\":\"密碼\"}",
"action": "stopBrowser",
"requestId": "全域唯一標識"
}
3、回應結果:
{
"statusCode": "狀態碼",
"err": "例外資訊",
"action": "stopBrowser",
"requestId": "全域唯一標識"
}
4、狀態碼:
(1) 0 : 成功
(2)-10000 : 未知例外
(3)-10002 : Socket引數非法
(4)-10003 : 登錄失敗
(四)Action : getBrowserEnvInfo
1、說明:和startBrowser類似,區別就是內核視窗startBrowser由主程式啟動,getBrowserEnvInfo由Webdriver啟動
2、請求引數
{
"userInfo": "{\"company\":\"公司\",\"username\":\"用戶名\",\"password\":\"密碼\"}",
"action": "getBrowserEnvInfo",
"browserOauth": "店鋪ID",
"isHeadless": true, //是否啟用無頭模式
"requestId": "全域唯一標識"
}
3、回應結果:
{
"statusCode": "狀態碼",
"err": "例外資訊",
"action": "getBrowserEnvInfo",
"browserOauth": "店鋪ID",
"requestId": "全域唯一標識",
"browserPath": "內核exe所在位置",
"launcherPage": "店鋪所屬平臺的默認啟動頁面",
"browserArguments": "啟動必要引數",
"debuggingPort": "除錯埠"
}
4、啟動Selenium 必要引數
//根據getBrowserEnvInfo 回傳結果啟動Selenium
ChromeOptions options = new ChromeOptions();
//內核exe所在位置
options.addArguments(browserArguments);
//啟動必要引數
options.setBinary(browserPath);
//除錯埠
options.addArguments("--remote-debugging-port=" + debuggingPort);
5、狀態碼:參考Action : startBrowser
(五)Action : heartbeat
1、說明:非必要介面,只是用于保活Socket連接
2、請求引數
{
"userInfo": "{\"company\":\"公司\",\"username\":\"用戶名\",\"password\":\"密碼\"}",
"action": "heartbeat",
"requestId": "全域唯一標識"
}
3、回應結果:
{
"statusCode": "狀態碼",
"err": "例外資訊",
"action": "heartbeat",
"requestId": "全域唯一標識"
}
4、狀態碼:
(1) 0 : 成功
(2)-10000 : 未知例外
(3)-10002 : Socket引數非法
(4)-10003 : 登錄失敗
(六)Action : exit
1、說明:正常退出超級瀏覽器主行程,會自動關閉已啟動店鋪并保持店鋪cookie等資訊,
2、請求引數:
{
"userInfo": "{\"company\":\"公司\",\"username\":\"用戶名\",\"password\":\"密碼\"}",
"action": "exit",
"requestId": "全域唯一標識"
}
3、回應碼:
4、狀態碼:
(1) 0 : 成功
(2)-10000 : 未知例外
(3)-10002 : Socket引數非法
(4)-10003 : 登陸失敗
五、getBrowserList中的SiteId說明
| index | id | name |
|---|---|---|
| 1 | 1 | ???? 美國亞馬遜 |
| 2 | 2 | ???? 加拿大亞馬遜 |
| 3 | 3 | ???? 日本亞馬遜 |
| 4 | 4 | ???? 英國亞馬遜 |
| 5 | 5 | ???? 法國亞馬遜 |
| 6 | 7 | ???? 意大利亞馬遜 |
| 7 | 10 | ???? 德國亞馬遜 |
| 8 | 11 | ???? 西班牙亞馬遜 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/288360.html
標籤:Python
上一篇:Python基礎之變數
