使用cdp4j進行淘寶自動化登錄

原文地址

http://118.25.172.253/2019/01/05/使用cdp4j進行淘寶自動化登錄/#morehtml

先給出成品圖

image

cdp4j簡單描述

cdp4j is a web-automation library for Java. It can be used for automating the use of web pages and for testing web pages. It use Google Chrome DevTools Protocol to automate Chrome/Chromium based browsers.java

簡單來講cdp4j就是一款在java端經過代碼直接驅動谷歌瀏覽器的工具,咱們能夠用它來實現一些自動化測試或爬蟲。web

這裏咱們用它來實現淘寶的自動化登錄。瀏覽器

先說明一下,cdp4j操控瀏覽器,瀏覽器是沒法檢測出是否是自動化工具的。 而selenium操控瀏覽器,是會被識別出來的。cookie

因此咱們若是用selenium操做瀏覽器進行淘寶登錄,是沒法登錄的。除非使用代理軟件修改淘寶js文件,固然這是後話。session

不清楚cdp4j爲啥不會被檢測出來,可是cdp4j功能仍是比較少的,遠小於selenium。工具

因此cdp4j模擬登錄的失敗率較高,每每程序須要執行屢次纔可登錄成功,如上圖:測試

但即便這樣,這也是能夠接受的。編碼

淘寶登錄過程分析

整個淘寶登錄過程差很少分爲下面5個階段。url

  1. 操做瀏覽器打開淘寶登錄地址
  2. 獲取用戶名輸入框,輸入用戶名
  3. 獲取密碼輸入框,輸入密碼
  4. 滑動滑塊
  5. 點擊登錄按鈕

接下來,咱們對於這五個階段來進行編碼。

開發前提

使用cdp4j須要電腦安裝了谷歌瀏覽器,而後在項目中添加cdp4j的依賴便可使用。

<dependency>
    <groupId>io.webfolder</groupId>
    <artifactId>cdp4j</artifactId>
    <version>3.0.0</version>
</dependency>
複製代碼

打開淘寶登錄地址

Launcher launcher = new Launcher();

SessionFactory factory = launcher.launch();

Session session = factory.create();

String url = "https://login.taobao.com/member/login.jhtml?style=mini_top";

session.navigate(url).waitDocumentReady();
複製代碼

輸入用戶名

session.click("#TPL_username_1").sendKeys(username);
複製代碼

輸入密碼

session.click("#TPL_password_1").sendKeys(password);
複製代碼

滑動滑塊

注意:cdp4j不支持操控鼠標進行滑動。因此咱們這裏使用java的robot類來操做鼠標進行滑動。

Robot robot = new Robot();
//設置操做延時 避免操做太快
robot.setAutoDelay(800);
//鼠標移動到某個點
robot.mouseMove(900, 266);
//使用左鍵按壓住
robot.mousePress(InputEvent.BUTTON1_MASK);
//移動到某個點
robot.mouseMove(1060, 266);
//釋放按壓
robot.mouseRelease(InputEvent.BUTTON1_MASK);
複製代碼

代碼很通俗易懂,難點在於那兩個點的座標。這座標是你電腦屏幕裏某個點的x,y座標。

怎麼找到?

能夠經過軟件獲取。可是軟件獲取的也不太精確,因此還須要本身判斷。。

點擊登錄按鈕

session.click("#J_SubmitStatic");
複製代碼

總結

基本上經過上述流程就能夠實現淘寶的登錄。

這裏簡單描述一下這種方法實現登錄的優缺點:

優勢:

  1. 淘寶沒法識別是自動化腳本

缺點:

  1. 失敗率較高,一樣的代碼換一臺電腦能夠就運行失敗了。由於滑塊驗證那部分 屏幕座標不一樣的電腦是不同的。
  2. 沒法獲取頁面cookie。淘寶的不少接口都須要登錄,而後用登錄生成的cookie去調用接口。
相關文章
相關標籤/搜索