前言:

验证码问题对于每个ui自动化的同学而言,相信都是个蛋疼的问题,对于验证码的处理我个人不提倡破解,不要去想破解方法,这个验证码本来就是为了防止别人自动化登录的。如果你们公司的验证码很容易被你破解了,那么只能说你们公司验证码级别不高,去建议开发提高验证码级别了。

对于验证码,要么是让开发把验证码写死(传说中的万能验证码),如:1234,要么就是低调的尽量绕过去。

下面本文来介绍下如何绕过下图验证码,进入博客园

工具:

  • Fiddler.exe
  • IDEA/Eclipse
  • selenium的cookie操作

一、使用Fiddler抓包

1.一般登陆网站成功后,会生成一个已登录状态的cookie,那么只需要直接把这个值拿到,用selenium进行addCookie操作即可。

2.可以先手动登录一次,然后抓取这个cookie,这里我们就需要用抓包工具fiddler了

3.先打开博客园登录界面,手动输入账号和密码(不要点登录按钮)

4.打开fiddler抓包工具,此时再点博客园登录按钮

5.登录成功后,再查看cookie变化,发现多了两组参数,多的这两组参数就是我们想要的,copy出来,一会有用

二、cookie操作

1.这里需要添加两个cookie,一个是.CNBlogsCookie,另外一个是.Cnblogs.AspNetCore.Cookies。

2.我这里打开的网页是博客园子的首页:https://home.cnblogs.com/,没进入登录页。

3.添加cookie后刷新页面,接下来就是见证奇迹的时刻了。

4.关于cookie操作,有兴趣的同学可查看官方api

5.这里我们只使用addCookie这个接口的方法实现

Cookie cookie=new Cookie("key", "value");
driver.manage().addCookie(cookie);

三、参考代码

package com.test.demo;

import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.AfterClass; import java.util.Set;
import java.util.concurrent.TimeUnit; /**
* @author longrong.lang
* 绕过验证码登陆
*/
public class LoginWithCookie { WebDriver driver; @BeforeClass
public void beforeClass() {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
driver = new ChromeDriver(); } @Test
public void testLoginWithCookie() {
driver.get("https://home.cnblogs.com/");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//cookie遍历使用
Set<Cookie> cookies = driver.manage().getCookies();
for (Cookie cookie : cookies) {
System.out.println(cookie.getName() + "\t" + cookie.getValue());
}
Cookie cookie = new Cookie("key", "value");
//添加cookie操作
driver.manage().addCookie(cookie);
Cookie cookie1 = new Cookie("key", "value");
driver.manage().addCookie(cookie1);
Cookie cookie2 = new Cookie(".key", "value");
driver.manage().addCookie(cookie2);
Cookie cookie3 = new Cookie("key", "value");
driver.manage().addCookie(cookie3);
driver.manage().window().maximize();
//下面是见证奇迹的时候了
driver.navigate().refresh();
} @AfterClass
public void afterClass() {
//driver.quit();
} }

效果图:

有几点需要注意:

1.登录时候要勾选下次自动登录按钮。

2.add_cookie()只添加name和value,对于博客园的登录是不成功。

3.本方法并不适合所有的网站,一般像博客园这种记住登录状态的才会适合

学习过程中有遇到疑问的,可以加selenium(java) QQ群交流:631646987

Selenium+Java自动化之如何优雅绕过验证码的更多相关文章

  1. Selenium Java 自动化 介绍及开发工具的使用(一)

    前言 目前selenium版本已经升级到3.0了,网上的大部分教程是基于2.0写的,所以在学习前先要弄清楚版本号,这点非常重要.本系列依然以selenium2为基础,目前selenium3本人没做过研 ...

  2. 『心善渊』Selenium3.0基础 — 21、Selenium实现绕过验证码进行登陆

    目录 1.验证码问题 2.处理验证码的方法 3.Selenium绕过验证码登陆的实现 4.总结 5.补充练习 1.验证码问题 对于Web应用来说,大部分的系统在用户登录时,都要求用户输入验证码.验证码 ...

  3. selenium+java破解极验滑动验证码的示例代码

    转自: https://www.jianshu.com/p/1466f1ba3275 selenium+java破解极验滑动验证码 卧颜沉默 关注 2017.08.15 20:07* 字数 3085  ...

  4. python接口自动化-Cookie_绕过验证码登录

    前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...

  5. Selenium Web 自动化 - Selenium(Java)环境搭建

    Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...

  6. Python Selenium Cookie 绕过验证码实现登录

    Python Selenium Cookie 绕过验证码实现登录 之前介绍过博客园的通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍 1.1. ...

  7. python接口自动化(Cookie_绕过验证码登录)

     python接口自动化(Cookie_绕过验证码登录) 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以 ...

  8. python+selenium基础篇,cookie绕过验证码小案例

    1.绕过验证码有许许多多的方法,笔者在此介绍其中的一个小方法,原理其实就是获取已登陆了之后的凭证(会话保存在本地的cookie中)再打开另一个页面的使用 2.F12(浏览器开发者调试工具)可以查看的需 ...

  9. python接口自动化(十三)--cookie绕过验证码登录(详解)

    简介 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接).获取不到也没关系,可以通过添加cookie的方式绕过验证码.(注意:并不是所有的 ...

随机推荐

  1. jsp查询修改

    也是只帖代码....不讲解. 1.search.jsp <%@ page language="java" import="java.util.*" pag ...

  2. 伪触发 input file 的click事件

    前端在做 input file 美化的时候,通常 把 input 定位position 到 已美化的按钮最上方 opacity: 0 HTML5时代,已有更方便的方法,点击美化按钮直接触发选择文件事件 ...

  3. springboot(十七):过滤器(Filter)和拦截器(Interceptor)

    概述 在做web开发的时候,过滤器(Filter)和拦截器(Interceptor)很常见,通俗的讲,过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西:拦截器可以简单理解为“拒你所想拒”, ...

  4. Pre-shared key

    Pre-shared key https://en.wikipedia.org/wiki/Pre-shared_key In cryptography, a pre-shared key (PSK) ...

  5. Spark思维导图之性能优化

  6. vue之简单的todoList(一)

    <!-- 根组件 --> <!-- vue的模板内,所有内容要被一个根节点包含起来 --> <template> <div id="app" ...

  7. Java基础_0206:方法的定义与使用

    方法的基本概念 方法的主要功能是封装可以执行的一段代码,这样不仅可以进行重复调用,更可以方便的实现代码的维护,而本次使用的方法定义语法如下所示. public static 返回值类型 方法名称(参数 ...

  8. 帝国cms建站方法和知识点

    帝国cms建站方法和知识点 1.  首先在帝国cms网站上下载模板系统.根据模板系统上的提示,将指定的目录文件放在指定的位置.然后进行安装.后台管理系统的命名设置.数据库的设置等等. 2.  安装完成 ...

  9. java Object类的公共方法

    1.HashCode();      2. wait();  3. notify(); 4.equals(); 5.getClass(); 6.toString(); 7.clone(); 8.fin ...

  10. 由JDBC而来的对Class.forName()用法发散

    昨日在帮一个学习java的小伙子指导JDBC链接数据库时,在对数据库驱动进行加载时,用到Class.forName(),一直都是照葫芦画瓢,对这种写法一直不是太理解,故查询了相关文档后,将心得记录一下 ...