selenium点击验证码 及 实现cookie自动登录

时间:2024-03-19 12:55:35

问题背景:

     某一天接到一个爬某简历网站的需求,每次需要登录账号,而且每次都需要识别点击验证码。

思路:

    第一步:

              因为简历网站很多都是按键都是js控制的,所以我选择了selenium。(ps:期间我加了headless参数,想隐藏chrom,不知道为什么却一直卡在了那里,有遇到过这种情况的可以留言帮忙,谢谢)

             解决点击验证码的问题:我是接的第三方平台的接口(超级鹰。。百度一下就可以了),根据他们的文档,接入自己的工作就行了。

   第二步:

           正当我解决了验证码问题之后,我发现由于我连续登录了几次之后,简历网站的账号异常了,心有不甘的又让同事注册了一个新的账号,然后我开始反思这个问题,我猜想应该是网站后台发现账号连续登录频率高,以为我在攻击他们?当然,这只是我的猜想。有知道原因的可以指教一下。

          第二天,我拿到了一个新的账号,于是我换了一种方法,在我第一次通过验证码登录的时候,拿到登录之后的cookie(取cookie之前一定要再刷新一下页面,因为点登录之后,cookie还在服务器的响应里待着,需要刷新,方便selenium去取)

  第三步:实现逻辑

         首先,我是先在pycharm里,创建了很多的py文件,配置文件,主文件,工具文件,测试文件,当然了,每个人的习惯不同,还有一个重要的是要有一个存cookie的json格式的文件。目前架构不好,比较乱,希望有大神指教。

         1.创建了一个spider类,在Init文件中定义webdriver 生成browser对象,因为它是一个单线程局部变量,我的代码就是单线程,所以就在创建类的时候生成了browser对象。

selenium点击验证码 及 实现cookie自动登录

     2.流程开始是  先去判断有没有cookie文件,有的话就直接读出来,添加到browser对象中去,就可以访问浏览器了,当然,如果只是这样,肯定是会出问题的,  因为cookie是会过期的,我不知道他们的expires,所以我只能去判断,登录之后的页面中有没有我想要的东西,比如说用户名。

      如果拿着现在的cookie,没有登录成功,我就会去执行登录逻辑--》自动点击验证码(第一步),最后再更新一下cookie文件。以便下一次使用。

    如果线程跑起来之后,发现没有cookie文件,就会去执行第一步的登录逻辑,(要单独把登录逻辑分离出来,实现重复利用)

最后就是再代码里都加一些判断,和try.except..else..finally语句就可以了,最后记得关闭浏览器哦!browser.close()

 

接下来再访问网站中的内容的时候就不会报账号异常了

欢迎批评指教