关于java+selenium识别验证码的问题

---------## (关于java+selenium识别验证码的问题)

hahahahahahahahahahahahahaha~The first time you write a blog, QAQ

如题,用selenium操作浏览器登录网站,验证码是个头疼的问题,翻遍了网上,大概两种方法,第一种手动登录,然后用找到浏览器中登录的cookie,将cookie添加到chromedriver里,跳过登录页面,参考文章:https://blog.csdn.net/ab_2016/article/details/78427084
这里说明的第二种,把验证码拿到本地识别,然后输入网站文本框,测试了三十多个网站,测试效果比较理想,正确率高达百分85%
@!1,加载chromedriver打开url;// 没什么好说的
关于java+selenium识别验证码的问题_第1张图片
这里我们拿搜狗推广的后台做个例子;
关于java+selenium识别验证码的问题_第2张图片
@!2,我们需要把验证码存到本地;
说一下selenium找元素的问题,我是用xpath定位的,(网页中的绝对路径)//个人感觉比较好用而且比较方便,最最重要的是,找xpath参数chrome浏览器的开发者模式提供了很大的便利,当然别的浏览器也有,这里我用的是chrome。
F12打开开发者模式,检查元素
关于java+selenium识别验证码的问题_第3张图片
@之后你会在下面看到这个元素的大概位置,选择Copy弹出的选项里有一个Copy XPath;我们选择这个复制出来,CopyXpath://*[@id=“validateCodeImg”],这里要注意的是,chrome复制出来的这个XPath要做一些修改,如果你用的是java,需要将id=后面的双引号改成单引号,不然会报错的,像这样;关于java+selenium识别验证码的问题_第4张图片

@随后我们可以在路径下找到这张验证码;关于java+selenium识别验证码的问题_第5张图片

@!3,发送请求来处理这张验证码
我们需要找一个网站的借口来识别这个验证码;这里我用的是若快打码,官网给出了详细的接入信息,请求返回值有两种,如果用selenium的话,返回txt格式的会好一点;
关于java+selenium识别验证码的问题_第6张图片

1,接口(需要的部分);
关于java+selenium识别验证码的问题_第7张图片

@调用起来挺方便的,
在这里插入图片描述

返回result,拿到这个值;
关于java+selenium识别验证码的问题_第8张图片

**@4,最后我们拿到result,同理找到验证码框的元素,然后sendKeys(result);,最后找到登录按钮元素click();它就OK了。//因为验证码识别有时候会有错误,不能保证每次都正确,所以最好在登录页面取一个固有元素加个判定,来进行控制。

你可能感兴趣的:(#1)