selenium高效刷新图验证码

使用场景:项目中用selenium驱动chrome在网页中登录,但是登录有图形验证码,想刷新验证码时,模拟点击图片刷新,但是由于点击后图片是异步加载,所以无法得知新图片什么时候加载完成,就用wait等待3s后,再截返回图验证码图片.但是这样刷新验证码很慢,体验不好.

解决思路:打开一个新标签页,然后get请求图片验证码url.再截返回图验证码图片.由于get是阻塞的,所以不用判断图片加载状态问题.

编码设置:

/**
* 刷新图形验证码,通过在新标签get方式(同步)获取图形验证码,达到实时响应效果
* @param imageUrl
* @return BufferedImage
*/
public BufferedImage getRefreshImage(String imageUrl){
lastUpdateTime = System.currentTimeMillis();
BufferedImage image = null;
WebDriver newWindowDriver = null;

//打开新标签
this.executeScript("window.open(‘data:,‘)");
//获取所有标签
ArrayList<String> tabs = new ArrayList<String> (this.driver.getWindowHandles());
try {
//切换到新标签
newWindowDriver = this.driver.switchTo().window(tabs.get(1));
//在新标签中打开图片
newWindowDriver.get(imageUrl);
//获取截图
image = SeleniumTools.getElementImage(newWindowDriver, By.tagName("img"));
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭新标签页
if (newWindowDriver != null) newWindowDriver.close();
//切换到原页面
this.driver.switchTo().window(tabs.get(0));
}
return image;
}

时间: 2024-07-30 20:07:48

selenium高效刷新图验证码的相关文章

动态生成能够局部刷新的验证码【AJAX技术】---看了不懂赔你钱

在开发JavaWeb应用时,动态生成能够局部刷新的验证码是一项必须的功能,在这里我们将会详细的讲解如何实现这一功能. 一.涉及技术 该功能需要用到AJAX异步传输技术,这样能保证在点击"看不清,重新获取验证码"按钮时,能够不刷新页面其它内容而局部刷新验证码图片内容. 还需要用到Servlet技术,这里会在Servlet的GET方法中通过Java内置的画图工具绘制一个验证码图片,可以在HTML的<img/>标签中的src属性获取缓存图片资源. 二.各个页面及代码 1.inde

【Mac + Python + Selenium】之获取验证码图片code并进行登录

初稿代码,可以忽略不计(自己留着看) #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/01/15 13:27 # @Author : zc # @File : 115test.py from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep from PIL import Image,Im

selenium登录 京东滑动验证码

京东的滑动验证码在页面上是没有原图的,所有我是用ps把他们拼成一个的. from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import

selenium+java 关于图形化滑块的处理(1)

新人新手,初次接触selenium+Java自动化测试,试着分享点学习中的东西. 在做自动化的时候,有时会遇见图形化校验的问题,特别是现在大部分网站都加上了滑块校验,今天分享一下最简单的滑块校验的处理: 这个滑块的处理步骤: 1.先定位和滑块控件的元素: 2.获得滑块滑动的距离,也就是滑块目的地的坐标: 3.拖动滑块. 1.定位滑块控件,如下图 定位外面的控件也行,定位里面小的那个也行 //外 WebElement sour = driver.findElement(By.cssSelector

如何利用python+Selenium对登录的验证码进行验证?

python+Selenium自动识别验证码Fg.save_screenshot('D:\HuaYu\image\image.png')ce = Fg.find_element_by_id("ensure") # 具体的id要用F12自行查看print(ce.location)im = Image.open('D:\HuaYu\image\image.png') 根据图片调整位置img = im.crop((860,507,945,532))print(img)img.save('D:

JQuery+AJax - 无刷新使用验证码

最终效果: 项目目录: Default.aspx前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l

使用selenium截屏获取验证码

self.driver = Chrome(CHROME_DRIVER) #初始化对象self.driver.set_window_size(1280, 1024) #设置窗口大小 self.driver.execute_script( 'localStorage.setItem("pre_appadmin_login_2541044284@qq.com",JSON.stringify(%s))' % self.local_storage)#设置localStorage本地缓存 self

在mvc中实现图片验证码的刷新

首先,在项目模型(Model)层中建立一个生成图片验证码的类ValidationCodeHelper,代码如下: public class ValidationCodeHelper { //用户存取验证码字符串 public string validationCode = String.Empty; Random ram = new Random(); Graphics g = null; int bgWidth = 0; int bgHeight = 0; public string Font

js单击图片刷新验证码

onclick="this.src='code.jsp?d='+Math.random();" //thinkphp 地址生成         function againverify(){ $(".f_yzmimg").attr('src','{:U("forget/verify")}?d='+Math.random()); } 通过单击刷新图片验证码,可对图片绑定onclick事件处理程序