• 绕过selenium的检测,实现模拟登陆


    转载: https://zhuanlan.zhihu.com/p/56040461

    上一篇文章《selenium的检测与突破》讲过了如果绕过对于webdriver的检测。

    接下来就可以登陆了吗?别高兴太早:

    无论我使用’find_element_by_id’还是’find_element_by_xpath’,当输入密码时候都会出现“哎呀出错”的滑动验证码。想必大家都会被此困惑。

    于是乎,我通过邪恶F12 发现每当用户名发生变更之后,点击密码输入框,就会出现一个POST请求,两个参数:一个username,另一个是一大串的ua,返回一个{“needcode”:“True”} ,诶?好像懂了一些,于是,测试不使用selenium的正常登陆,返回的值的False。嗯,又懂了一些。

    在这里插入图片描述

    在这里插入图片描述

    那么问题来了,这一大串ua怎么搞?

    If you can ,受小弟一拜!

    于是,我尝试使用上文的代码注入思想,能不能偷梁换柱,将True改为False,对不起,没好使。

    经查阅资料,这一大串ua,不仅包括着浏览器指纹,鼠标轨迹,等等等,并且,算法不止一套。

    最后,还是老老实实尽量去模拟真人操作吧:

    控制变量法:

    第一回合:

    通过’find_by_element_'输入账号密码后,并且sleep随机时间,手动滑动验证码,无论怎么滑,刷新多少次都是“哎呀出错了”→刷新,继续手动输入账号密码,手动滑动验证码→死循环——很委婉的验证失败。

    所以,那些网上说滑动验证码,要分段,或者通过速度曲线去滑,都是次要的。因为已经检测出来是机器人, 只是通过这种方式很委婉的告诉你被反爬了,败北。

    第二回合:

    把‘find_element_by_’统统注释掉,采用ActionChains,并且来一些障眼法——做一些鼠标移动的假动作,败北。

    第三回合:

    仅仅通过selenium+mitmproxy+chromedriver 去启动浏览器,然后手动去输入账号密码,哎?没弹验证码,并且点击登录,成功了????

    因此我断定,这第二关是行为反爬

    继续科学上网,其实chromedriver会将下图中的JavaScript文件注入浏览器。

    在这里插入图片描述

    于是我的猜想:

    1.通过sleep随机时间,排除了操作过快的原因。

    2.find_element_by和ActionChains都是会被检测的。好像是selenium会开启一个本地代理,所有的浏览器自动操作都会用这个代理进行,find_element方法就与selenium代理进行了通信,不知道js是怎么知道selenium的准确代理地址并知道进行了通信。并且他们也许检查有chromedriver的js执行引起的修改。

    3.通过具有偏移量的元素来检测——通过selenium点击一些带有偏移量的元素(按钮)仍会引发。例如从扫码登录切换到账号密码登录的按钮。我想阿里对于自然用户行为肯定有一番研究的。


    ok,通过低效的最笨的方法,按键精灵思想,来模拟:

    我来写一个shell脚本,通过像素点坐标,从驱动层模拟键盘鼠标的操作,绕过检测。

    成功了!

    但是此方法效率低,并且限制也比较多,例如屏幕大小和分辨率不可随意变更,不支持headless。

    shell的代码就不公布(因为我不知道您的使用意图)。很简单,但思想必须到位。

    ps:留言评论我都会认真看的,另外有更好的想法可通过cheezeleo@163.com与我取得联系方式交流。


    转自: https://zhuanlan.zhihu.com/p/56040461

  • 相关阅读:
    Android studio 使用flutter插件 运行第一个flutter项目 报错 Warning: License for package Android SDK Build-Tools 28.0.3 not accepted.
    Android 使用GPS获取到经纬度后 无法在Android8.0上使用Geocoder类获取位置信息
    Android 利用 gson 将 json 转成 对象object 集合list
    Android 6.0 7.0 8.0 一个简单的app内更新版本-okgo app版本更新
    iview组件 eslint校验出错 Parsing error: x-invalid-end-tag
    新建 Vue项目 使用iView报错解决
    Typora 自定义主题 修改左右间距
    Vue 嵌套数组 数组更新视图不更新
    如何在手机设备上实时调试
    通过ReRes让chrome拥有路径映射的autoResponse功能。
  • 原文地址:https://www.cnblogs.com/onefine/p/10499324.html
Copyright © 2020-2023  润新知