使用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去调用接口。
相关文章
相关标签/搜索