最近遇到极验验证码,在新的浏览器登录需要二次验证。第一次验证是随机出现三种验证码之一(默认为中文点击验证码,其他的为:滑动、图片验证码)。
第二次验证码需要获取注册号码的的手机号码验证码或者是绑定邮箱的验证码。
。这个可以做个自动登录邮箱的代码直接获取了。主要的是第一步验证码的绕过或者其他形式的绕过。
通过测试一段时间,有时候selenium是可以正常的登录,一会儿就不可以正常登录,那么换cdp4j,倒是可以的登录。但是太不稳定。时间选择器位置会变化,xpath不好定位。一般情况下可以通过计算tr以及td的下标可以计算值xpath的定位位置。但是cdp4j对一些不存在的标签点击(即错误的位置点击)会出现假死,即不出现异常,但是程序一直会卡住(有种办法就是先获取他的源码,判断对应的pxath的坐标是否存在,但是还是稳定性欠佳,达不到上线的标准)
Jsoup可以作为简单的行标签,css,class,id作为定位,但是有时候不太方便。可以参考他的增强版(JsoupXpath)1
compile group: 'cn.wanghaomiao', name: 'JsoupXpath', version: '2.3.0'
但是通过测试可以发现,他的验证码会在已经登陆过后的浏览器是不会加载的,简单的可以理解为网站会收集浏览器的唯一标识码或者一些特征码进行与账号绑定,若账号在已经登陆过的,下次可以省掉验证码这一个环节。
但是selenium会在每次加载驱动的时候默认是不加载配置,即创建新的session。具体表现为每次打开的浏览器,用于登录账号都是一个“新”的浏览器。对于这样子的情况下,必然是每次都需要手动过掉验证码,势必效率低下,费时费力。那么,有一种办法让他不创建新的浏览器环境,使用上次登陆的环境。那么问题应该迎刃解决了。
直接贴上核心代码了。就那么一行了。。。目录下的Windows用户一般都是修改成为你的电脑的登录用户名即可。1
options.addArguments("user-data-dir=C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data\\Default");
测试,大功告成。剩下就是,还有个问题,那就是貌似这个平台对多次登陆的浏览器会限制。具体表现是打开登录界面一片白色。即不渲染。但通过清除Cookie,刷新页面即可重新打开登录页面。。。
真他妈的太狗了,,,接下来就是找出是那个王八蛋参数导致登录页面一片白色了。麻蛋。。。
已经找到问题了。妈的,真的是Cookie导致页面无法正常加载。。。他妈的。