今天接到用户反馈,1688网站弹出对话框后拉动滑块无法验证通过。
测试了确实如此。
打开Chrome发现它能正常验证通过,打开Firefox、Edge都可以,难道我用的cefsharp私生子?
最开始认为最大的嫌疑是UserAgent,换了好多都不行,用fiddler查请求一模一样,结果就是验证不通过。
然后怀疑是cefsharp的版本问题,因为网上有人说63是可以的,之后的都不行,太新了不支持。这个虽说没道理,因为最新版的Chrome是正常的,但还是从63一直试到88,都不行,这个因素排除。
搞了一下午都想放弃了,但是看到不断有用户来反馈,想想还是要对用户负责任,继续攻坚,终于发现了一点蛛丝马迹:
Chrome浏览器,只要我把浏览器窗口的最大化取消,变成正常窗口,那么验证滑块就无法通过,跟我的cefsharp一模一样;于是我又试了FireFox,结果也是一样,原来这个滑块认证需要判断窗口状态,太小的窗口它认为不是一个正常的用户,似乎有点道理,于是我把cefsharp的窗口也改成了最大化,结果大失所望,仍然还是无法验证通过。
应该还有其他的影响。我打开了cefsharp的开发者模式,在日志中发现有个js文件中警告但显示是乱码,然后我通过浏览器打开这个js的网址,这个警告的意思是页面正在使用viewport的方式(大概意思),也就是说跟页面缩放有关。我记得Chrome是有页面缩放百分比控制功能的,验证会不会跟这个有关系呢?于是我尝试设置cefsharp的zoom level,发现设置为1时(也就是页面缩放为120%)+最大化的时候,滑块很容易验证通过。
至于原理应该是里面有js代码来判定,不愿意查了,能解决问题就好。代码我只加了两处:
一是窗口最大化,这个不写了了。
二是cefsharp设置zoom level,在文档加载完比后:
CWebBrowser.SetZoomLevel(1);
这样做完以后,基本都能1次验证通过,最多2、3次就搞定了。
感觉应该还有其他的思路,不是唯一解。
-----------------------------------------------------------------
2021.07.05更新
塞翁失马,焉知非福?阿里近期再次升级了风控,之前放大页面的方法也不管用了,难道就此终结了吗?没想到貌似把人逼到绝路的时候,恰恰有了枯木逢春的时机。
网友评论