热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用selenium模拟登录知乎

网上流传着许多抓取知乎数据的代码,抓取它的数据有一个问题一定绕不过去,那就是模拟登录,今天我们就来聊聊知乎的模拟登录。获取知乎内容的方法有两种,一种是使用request,想办法携带cookies等

网上流传着许多抓取知乎数据的代码,抓取它的数据有一个问题一定绕不过去,那就是模拟登录,今天我们就来聊聊知乎的模拟登录。

获取知乎内容的方法有两种,一种是使用request,想办法携带COOKIEs等必要参数去请求数据,但是使用requests的话,不仅要解析COOKIEs,还要获取XSRF,比较麻烦,所以我想到了selenium。

我直接控制Chrome请求知乎,然后模拟输入用户名和密码,这样不也可以吗,嘿嘿

接下来说一下大体流程:

  首先控制selenium模拟请求知乎登录界面:https://www.zhihu.com/signup?next=%2F

  

  但是默认为注册,所以需要控制鼠标来点击上边那个登录按钮,就变成这样了。

  

  然后我们在控制浏览器找到输入用户名、密码的这两个input标签,使用send_keys()来将用户名密码输入进去即可,部分代码如下:

  

  但就在我正要点击登录按钮时问题出现了:验证码

  经过测试,知乎的验证码分为两种,而且两种验证码所对应的代码是不一样的:

    第一种:4位英文数字组成的图片,用户输入对应的英文数字即可。

    第二种:纯中文组成的图片,用户使用鼠标来点击图片中倒立的汉字进行验证。

  但是我发现验证码也不是次次都出现的,而且如果验证码要出现,当用户输入完密码之后就可以看见了。

  而且即使验证码没有在页面中显示出来,却并不代表没有验证码,验证码那一部分代码还是存在的,只是在存放验证码图片的标签那儿图片链接显示为null而已。

  那么当一个用户在登录知乎,输入完用户名、密码之后会遇到两大类、四小类(一共四种情况)

    (一)无验证码:用户输入完用户名、密码之后没有看见验证码

      (1):(英文数字验证码)代码部分中的class为englishImg, src为null

      

      (2):(纯中文验证码)代码部分中的class为chineseImg, src为null

        

    (二)有验证码:用户输入完用户名、密码之后会看见验证码

      (1):(英文数字验证码)代码部分中的class为englishImg, src为base64编码的图片路径

        

      (2):(纯中文验证码)代码部分中的class为chineseImg, src为base64编码的图片路径

        

  既然分为两大类四小类,那我们就挨个的处理,首先在输入用户名改密码密码后判断有没有验证码显示出来,若没有,则直接点击登录按钮进行登录;  

  这是我辨别验证码类型的部分代码:

  

 

  若有验证码显示出来,则再进行细分,是中文点击验证码还是英文数字输入验证码,辨别验证码类型后再分别进行处理。

  首先说一下中文验证码:嘿嘿嘿,时间比较仓促,这个我就没有识别,我看别人都是将验证码保存至本地然后对每个中文的位置进行大致定位,然后人工输入倒立的字的序号,然后计算出该字在图片中的位置,在操控鼠标进行模拟点击。

  下面我们说说英文数字验证码:这个主要有两种解决方案

    第一种:人工打码。当验证码出现时,将经过base64编码的图片进行解码然后保存至本地,然后将图片展示出来进行人工识别,再在控制台中输入识别后的结果,最后李勇模拟浏览器将结果输入到登录页面中进行登录。

    第二种:借助第三方打码平台自动打码,首先将验证码保存至本地,然后接入第三方打码平台的接口进行机器打码,最后将结果输入登录界面。

  在这里我详细说说第三方打码的过程:

    我是用的是“云打码”平台的接口(然后无意间发发现了他们平台一个错别字,是登录,不是登陆),首先注册一个开发者账号:

    

    进去之后点击我的软件,新建一个自己的软件(名字随便填),然后会获得一个软件代码(id),通讯密钥(key),这两个参数在调用接口时要用。

    

    然后联系官网上的客服,以开发者的身份向他索要测试分(云打码平台是收费的,没有题分,无法识别验证码)

    然后在官网上的开发文档中选择调用示例及最新DLL,点击PythonHTTP示例下载,下载接口Demo

     

     然后将Demo中的必要参数改一改(如username、password、id、Key等)最后在记得的代码中调用一下即可。

    在验证码全部处理完毕之后再进行模拟登录就可以正常的访问知乎中的内容了,最终我获取了知乎首页的文章标题

     

ps: 下边这张图片中的代码是在模拟登录之后将COOKIEs持久化至本地,等下次调用时直接将COOKIEs放到session中保持长连接进行请求,不需要再登录

 

ps:  在一切处理好之后我在模拟点击登录时又碰到了一个问题,切切都处理好了,在点击登录按钮后并没有进入登录页面,而是显示 “Miss argument grant_type ”  查询资料说是浏览器版本问题,当我将Chrome从70降到60后问题就解决了。

ps:  本次代码我全部在我的github上:  https://github.com/songsa1/Python_song  (60版本的Chrome和对应的webdriver的百度云链接在项目的readme中)

欢迎大家来关注我的个人公众号:“进阶的爬虫”  我会定期在公众号中分享爬虫的教程、项目案例,还有互联网圈中的一些新闻、趣事儿。 

 


推荐阅读
  • 快递100企业版物流快递接口使用流程
    varis_mobinavigator.userAgent.toLowerCase().match((ipod|iphone|android|coolpad|mmp|smartph ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • FIN7后门工具伪装成白帽工具进行传播
    fin7,后门,工具,伪装,成,白, ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • 【Python 爬虫】破解按照顺序点击验证码(非自动化浏览器)
    #请求到验证码base64编码json_img_datajson_raw.get(Vimage)#获取到验证码编码 #保存验证码图片到本地defbase64_to_img(bstr ... [详细]
  • 1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版) ... [详细]
  • python实现内容写在图片上的方法
    这篇文章主要介绍python实现内容写在图片上的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体代码内容如下:#-*-co ... [详细]
  • 1、运行npmrundev命令在cmd上面也不算报错输出一些东西看不懂什么意思。报错页: ... [详细]
  • 技术分享:如何在没有公钥的情况下实现JWT密钥滥用
      ... [详细]
  • 【实例简介】【实例截图】【核心代码】1.核心模块o1.1.介绍o1.2.__builtin__模块o1.3.exceptions模块o1.4.os模块o1.5.os.path模块o ... [详细]
author-avatar
greybt
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有