文章目录

  • 写在前面
  • 配置环境
  • Selenium入门
  • 使用Selenium登陆58
  • 若快平台识别文字点击验证码
  • 附:
    • By对象中的 xpath & cssSelector获取方式**
    • 不打开浏览器在后台进行操作
    • 自动登陆+识别gif
    • [源码下载](https://download.csdn.net/download/ronny_xie/11110343)

写在前面

Selenium原本是一套网页自动化测试工具,模拟用户真实浏览操作进行测试。
如今我们可以使用Selenium进行模拟登陆,不需要像以前一样去写网络框架模拟登陆

注意:

  • 若通过一般的网络接口请求登陆足够方便,尽量使用一般的模拟登陆方式;
    Selenium由于是模拟用户实际动作进行登陆,若网站出现改版等情况很可能造成登陆失败!
  • Selenium模拟登陆比较适合用于存在js加密,ajax加密等特殊情况下;

配置环境

使用java环境+macOS+chromeDriver

  • java环境
  • ChromeDriver
  • selenium JAR

关于环境问题就自行下载了,附上下载地址:
SeleniumDownload

Selenium入门

当环境下载并且配置好之后就可以开始愉快的模拟用户登录~

  1. 创建一个ChromeDriver对象
    ChromeDriver driver = new ChromeDriver();
  2. 启动一个网址
    driver.get("http://passport.58.com/login")
  3. 运行程序

后台一串log日志之后就会发现一个chrome已经启动并且打开指定的网址了


使用Selenium登陆58

网上关于Selenium使用方法的文章很多,就不一一描述了;在这里只列举一些核心的使用方法!

·使用driver对象搜索页面中指定元素

public WebElement findElement(By by) {}

· By对象

public static By id(String id) 可绑定指定id元素

public static By linkText(String linkText) 可绑定指定的文本元素

public static By partialLinkText(String partialLinkText) 可绑定指定的连接文本

public static By name(String name) 可绑定指定name元素

public static By tagName(String tagName) 可绑定指定tag元素

public static By xpath(String xpathExpression) 可绑定指定xpath元素

public static By className(String className) 可绑定指定className元素

public static By cssSelector(String cssSelector) 可绑定指定cssSelector元素

· 根据By对象即可返回WebElement元素进行操作,常用如下:

void click() 顾名思义,点击事件

void submit() 表单提交

void sendKeys(CharSequence... keysToSend) 输入参数

String getText() 获取文本

Point getLocation() 获取相对位置

Rectangle getRect() 获取元素区域

举个栗子

  1. 使用账号密码登陆58
     driver.get("http://passport.58.com/login");driver.findElement(By.className("pwdlogin")).click();driver.findElement(By.xpath("//*[@id=\"usernameUser\"]")).sendKeys(phoneNumber);driver.findElement(By.xpath("//*[@id=\"passwordUserText\"]")).click();driver.getKeyboard().sendKeys(userPassword);driver.findElement(By.xpath("//*[@id=\"btnSubmitUser\"]")).click();//下文另附xpath&cssSelector快速获取方式
  1. 使用手机验证码登陆58
     driver.get("http://passport.58.com/login");driver.findElement(By.linkText("手机动态码登录")).click();driver.findElement(By.id("loginMobile")).click();//这里必须点击才能输入driver.findElement(By.id("loginMobile")).sendKeys(phoneNumber);driver.findElement(By.id("loginMobilecodeSendBtn")).click();Scanner s = new Scanner(System.in);driver.findElement(By.id("loginMobilecode")).click();//这里必须点击才能输入driver.findElement(By.id("loginMobilecode")).sendKeys(s.next());driver.findElement(By.id("loginMobileButton")).click();

若快平台识别文字点击验证码

在认证页面中需要通过文字类型的验证码,我们使用若快平台进行验证码识别

  1. 成功进入页面后,等待验证码加载完毕
  2. 修改当前验证码父div的大小(保证验证码保存本地时将需要验证的图片也一并保存)
  3. 本地保存验证码
  4. 将父div大小修改至默认
  5. 将验证码发至若快平台
  6. 解析数据,模拟点击
  7. 验证通过~
     WebElement elementDir = driver.findElement(By.className("isd-captcha-placeholder"));//假设验证码图片父div为此classNamesetAttribute(elementDir, driver, "style", "width:280px;height:200px");//替换元素指定值(将elementDir中的style属性设置为...),方法下文另附WebElement element = driver.findElement(By.xpath("//*[@id=\"ISDCaptcha\"]/div/div[2]/img"));//验证码elementFile screenShot = element.getScreenshotAs(OutputType.FILE);File screenShotLocation = new File("/123.jpg");copyFileUsingFileStreams(screenShot, screenShotLocation);//保存file至本地Thumbnails.of("/123.jpg").scale(1f).outputQuality(0.5f).toFile("/123.jpg");//压缩本地图片,由于若快平台限制上传大小,此处先做压缩;setAttribute(elementDir, driver, "style", "width:280px;height:150px");//还原验证码默认尺寸

跑通上面的代码应该就能将图片验证码保存在本地了

具体的若快平台验证流程和数据获取方式参考若快api文档

若快api文档

识别这种点击图片验证码若快的 typeID:6904

后面根据若快返回的数据在指定element上进行点击操作即可

     WebElement element = driver.findElement(By.xpath("//*[@id=\"ISDCaptcha\"]/div/div[2]/img"));Actions action = new Actions(driver);for (Point point : pointArrayList) { //若快平台返回的数据action.moveToElement(element, (int) (point.getX() / 2), (int) (point.getY()) / 2).click().perform();}

附:

By对象中的 xpath & cssSelector获取方式**

  1. 打开控制台
  2. 对指定元素右键
  3. Copy

不打开浏览器在后台进行操作

//以chromedriver为例ChromeOptions options = new ChromeOptions();options.addArguments("--headless");options.addArguments("--disable-gpu");

· 使用selenium修改指定element的css属性

 public static void setAttribute(WebElement e, WebDriver d, String attributeName, String value) {JavascriptExecutor js = (JavascriptExecutor) d;js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", e, attributeName, value);}

自动登陆+识别gif

源码下载

2019-4-12测试正常,其中已经包含selenium必要的一些lib

如果无法正常使用,理解代码修改其中一些元素指定器即可

Contact me : Ronny_xie@hotmail.com

java使用Selenium模拟登陆58(验证码登陆密码登陆)若快平台识别文字点击验证码相关推荐

  1. python爬虫 模拟淘宝使用账号密码登陆 用mitmdump防止检测出使用chromedriver

    使用淘宝账号密码模拟登陆淘宝 准备代理 登陆的代码 准备代理 为什么需要代理呢?因为淘宝有检测是否是chromedriver来访问的代码 通过浏览器分析js代码,可以找得到这个文件存在校验逻辑 htt ...

  2. 利用百度AI开放平台识别干部培训网登录验证码

    先说能干啥能干啥,看视频. MyVideo_2 个人测试,百度AI平台验证码识别率还是很高的.下面是视频程序的源代码,欢迎跟大家进行交流. import datetime import json fr ...

  3. python神经网络库识别验证码_基于TensorFlow 使用卷积神经网络识别字符型图片验证码...

    本项目使用卷积神经网络识别字符型图片验证码,其基于TensorFlow 框架.它封装了非常通用的校验.训练.验证.识别和调用 API,极大地减低了识别字符型验证码花费的时间和精力. 项目地址:http ...

  4. Java利用selenium模拟淘宝登录

    代码实现 import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium ...

  5. linux系统密码正则,Linux密钥登录原理和ssh使用密钥实现免密码登陆

    目录 1.公私钥简介与原理 公钥和私钥都属于非对称加密算法的一个实现,这个加密算法的信息交换过程是: 1) 持有公钥的一方(甲)在收到持有私钥的一方(乙)的请求时,甲会在自己的公钥列表中查找是否有乙的 ...

  6. windows 8 新登陆方式(图片密码、Pin码)

    新登陆方式(图片密码.Pin码) 在 Windows 8 增加一种新的登陆方式:"图片密码"登陆,其中图片密码的核心是由图片和用户绘制的手势组成.图片部分,用户可以自由选择图片作为 ...

  7. selenium 模拟登陆 古诗文网 含验证码

    ocr.py / 阿里云市场 import base64 import json import urllib.request from urllib import parse import ssl s ...

  8. selenium模拟登陆截取验证码

    向百度大大下手吧... 大致思路 1.打开chrome 2.进入百度 3.点击登录 4.切换账号密码登录 5.尝试获取验证码截图(密码输错三次就可以出现验证码了) GKD from selenium ...

  9. selenium模拟登陆去哪儿网

    序言 在模拟网页的表单登陆的时候,比较头疼的一个问题就是图片验证码的情况,碰到了验证码,比如像普通的文字图片类型的验证码,目前一个比较好的思路就是,通过selenium自身提供的截图功能,对指定的图片 ...

最新文章

  1. 机器学习与深度学习常见面试问题与答案
  2. Js 向json对象中添加新元素
  3. 11g中AWR新快照视图
  4. java异步调用第三方接口_Java调用第三方系统接口获取数据
  5. mysql rollup 排序_MySQL基础实用知识集合(二)
  6. html5 轮询自动刷新数据,后台调用exe,前端定时轮询调用结果
  7. 3 SAP STMS跨服务器传请求号
  8. CXF发布RestFul WebService和SOAP WebService
  9. theano学习指南5(翻译)- 降噪自动编码器
  10. sql server 2008 镜像挂起
  11. win10解压安装mysql缺少MSVCR120.dll文件的问题
  12. 微信小程序SEO排名优化
  13. 高盛为什么认为中国AI领域将超越美国?
  14. 河南省普通高中学业水平测试计算机,河南省普通高中信息技术学业水平测试综合测试题3(有答案)...
  15. Windows操作系统基础
  16. 【GAMES-202实时渲染】3、预计算环境光照(球谐函数(SH)、IBL、Split Sum、环境光阴影计算(PRT))
  17. 给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。 请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排
  18. 根据动力节点dubbo笔记
  19. Java连接Access 2013
  20. Easy to understand the top ten commonly used algorithms for machine learning

热门文章

  1. NAS4Free 配置BT下载
  2. 艾媒报告|2018-2019中国智慧物流行业研究报告
  3. CSharp再爱我一次,你真的懂泛型吗?
  4. 强制页面运行于IE8模式下
  5. Linux指南| 第2部分
  6. 字符输出流,缓冲流和序列化
  7. 联想微型计算机开机显示f1,联想笔记本开机后总是提示需要按F1才能进入系统如何解决...
  8. 婚恋交友app的开发解决方案
  9. 三人分糖果c语言,C语言顺序结构 -C语言桐桐分糖果问题(附带源码)
  10. 社交软件野蛮生长,为什么年轻人还是选择QQ?