前言:在微博进行模拟登录时需要点击验证码,使用网上打码平台来对验证码进行识别,完成登录。

1.模拟登录:

首先登录微博:https://passport.weibo.cn/signin/login


我们这里使用selenium进行模拟登录

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWaitbrowser=webdriver.Chrome()
wait=WebDriverWait(browser,20)
browser.get('https://passport.weibo.cn/signin/login')
time.sleep(3)
username=wait.until(EC.presence_of_element_located((By.ID,'loginName')))
password=wait.until(EC.presence_of_element_located((By.ID,'loginPassword')))
submit=wait.until(EC.element_to_be_clickable((By.ID,'loginAction')))
username.send_keys('用户名')
password.send_keys('密码')
submit.click()

2.获取验证码图片

获取验证码图片有两种方法:
1、先获取整张验证码图片的坐标,然后用image.crop()方法其进行截图;
2、分析网页源代码,找到验证码图片的连接,通过直接获取验证码图片的链接来获得验证码图片;

红笔标注的就是就是验证码图片的链接

我们这里采用第二种方法来获取验证码图片,代码如下:

img=wait.until(EC.presence_of_element_located((By.CLASS_NAME,'geetest_item_img')))
src=img.get_attribute('src')#获取链接信息
img_bytes=requests.get(src).content#获取验证码的字节流信息

3.使用超级鹰破解验证码

接下来我们需要将验证码图片的字节流信息发送到在线验证码平台进行识别了;
在做这一步之前我们需要有超级鹰的api以及在官网注册账号和密码;
超级鹰API代码如下(Python3版本):

import requests
from hashlib import md5class Chaojiying(object):def __init__(self, username, password, soft_id):self.username = usernameself.password = md5(password.encode('utf-8')).hexdigest()self.soft_id = soft_idself.base_params = {'user': self.username,'pass2': self.password,'softid': self.soft_id,}self.headers = {'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}def post_pic(self, im, codetype):"""im: 图片字节codetype: 题目类型 参考 http://www.chaojiying.com/price.html"""params = {'codetype': codetype,}params.update(self.base_params)files = {'userfile': ('ccc.jpg', im)}r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)return r.json()def report_error(self, im_id):"""im_id:报错题目的图片ID"""params = {'id': im_id,}params.update(self.base_params)r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)return r.json()

在这其中最重要的就是post_pic()方法和report_error();
**post_pic()**方法需要传入图片对象和验证码的类型,该方法会将图片和对象的相关信息发送给超级鹰的后台进行识别,然后将识别成功的JSON返回;
**report_error()**可以在发送错误的时候回调,调用此方法回返回相应的题分。
现在我们将验证码图片信息发送到超级鹰平台进行识别,代码如下:

from Chaojiying import chaojiyingCHAOJIYING_USERNAME='用户名'
CHAOJIYING_PASSWORD='密码'
CHAOJIYING_SOFT_ID=900288
CHAOJIYING_KIND=9102chaojiying=chaojiying.Chaojiying_Client(CHAOJIYING_USERNAME,CHAOJIYING_PASSWORD,CHAOJIYING_SOFT_ID)
result=chaojiying.PostPic(img_bytes,9004)##返回json格式信息

返回的result信息格式如下:

其中pic_str中则是我们需要的识别的验证码文字的坐标,是以字符串形式返回的,我们对其进行解析,代码如下:

#对result进行解析
groups=result.get('pic_str').split('|')
pic_id=result.get('pic_id')
locations=[[int(number) for number in group.split(',')] for group in groups]#返回验证码的坐标信息

4.模拟点击

最后我们使用selenium中的ActionChains进行模拟点击验证码,然后再点击确认按钮即可登录成功;

from selenium.webdriver import ActionChainsfor location in locations:print('开始点击:',location)ActionChains(browser).move_to_element_with_offset(img,location[0],location[1]).click().perform()time.sleep(2)time.sleep(2)
button=browser.find_element_by_class_name('geetest_commit_tip')#点击确认按钮进行登录
button.click()

最后登录成功,验证码破解完成。

5.全部代码

全部代码如下:

import time
from io import BytesIO
from PIL import Image
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from Chaojiying import chaojiying
from selenium.webdriver import ActionChains
import requestsCHAOJIYING_USERNAME='用户名cjy'
CHAOJIYING_PASSWORD='密码cjy'
CHAOJIYING_SOFT_ID=900288
CHAOJIYING_KIND=9102USERNAME='用户名wb'
PASSWORD='微博wb'class CrackWeiboSlide():def __init__(self):self.url='https://passport.weibo.cn/signin/login'self.browser=webdriver.Chrome()self.wait=WebDriverWait(self.browser,20)self.username=USERNAMEself.password=PASSWORDself.chaojiying=chaojiying.Chaojiying_Client(CHAOJIYING_USERNAME,CHAOJIYING_PASSWORD,CHAOJIYING_SOFT_ID)def __del__(self):self.browser.close()def open(self):'''打开网页输入用户名密码并点击:return :None'''self.browser.get(self.url)username=self.wait.until(EC.presence_of_element_located((By.ID,'loginName')))password=self.wait.until(EC.presence_of_element_located((By.ID,'loginPassword')))submit=self.wait.until(EC.element_to_be_clickable((By.ID,'loginAction')))username.send_keys(self.username)password.send_keys(self.password)submit.click()def get_img(self):'''查找图片节点:return: 图片节点'''img=self.wait.until(EC.presence_of_element_located((By.CLASS_NAME,'geetest_item_img')))return imgdef get_img_bytes(self,img):'''获取验证码图片的字节流信息:img: 图片节点:return:验证码图片'''src=img.get_attribute('src')img_bytes=requests.get(src).contentreturn img_bytesdef get_points(self,result):'''解析识别结果:result:返回的识别结果:return:转化后的结果'''groups=result.get('pic_str').split('|')pic_id=result.get('pic_id')locations=[[int(number) for number in group.split(',')] for group in groups]return locations,pic_iddef touch_click_words(self,locations):'''点击验证码图片:param locations:点击位置:return:None'''for location in locations:print('开始点击:',location)ActionChains(self.browser).move_to_element_with_offset(self.get_img(),\location[0],location[1]).click().perform()time.sleep(1)def check_login_success(self):'''测试是否登录成功:return:TRUE or False'''success=Falsetry:self.wait.until(EC.presence_of_element_located((By.CLASS_NAME,'m-text-cut')))success=Trueexcept:return successreturn successdef main(self):self.open()print('开始登录')tip=self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'geetest_radar_tip')))tip.click()time.sleep(6)img=self.get_img()button=self.browser.find_element_by_class_name('geetest_commit_tip')img_bytes=self.get_img_bytes(img)    result=self.chaojiying.PostPic(img_bytes,9004)##返回json格式信息locations,pic_id=self.get_points(result)#解析识别结果self.touch_click_words(locations)#进行点击验证码button.click()if self.check_login_success():print('登录成功')else:print('登录失败')self.chaojiying.ReportError(pic_id)crack.main()if __name__=='__main__':crack=CrackWeiboSlide()crack.main()

运行结果如下所示:

这次登录共点击了验证码上的3个字,坐标如上所示,最终登录成功。

识别验证码模拟登录微博相关推荐

  1. 使用第三方打码平台图鉴识别滑动验证码模拟登录

    文章目录 一.图鉴的账户注册 识别流程 二.欧模网案例滑动验证码模拟登录 页面分析 三.代码分析 四.欧模网案例展示 总结 一.图鉴的账户注册 图鉴网页地址: http://www.ttshitu.c ...

  2. python—简单数据抓取四(利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站、利用百度云的ocr识别自如租房网价格图片获取到自如网的价格)

    学习目标: python学习二十四 -简单数据抓取四 学习内容: 1.利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站 2.利用百度云的ocr识别自如租房网的价格图片,获取到自如网的价格数据 1.利 ...

  3. 模拟登录微博通,抓取新浪微博c#

    在前天我到公司就接到一个惊人的消息,说是新浪1.0的搜索接口关闭了,那我们的业务岂不是受很大影响,这个事太紧急了,大家在一起商讨该怎么办,跟新浪买2.0的接口肯定时间很长,最后决定抓取新浪网页的,新浪 ...

  4. Java使用HttpClient模拟登录微博

    前言 前几天刚刚接触了Java这边的关于HTTP的一个工具包-HttpClient , 那么就想借此机会练练手, 用这个工具进行对微博的模拟登录, 简单的获取一下微博的数据 , 但是大家可以不必执着于 ...

  5. Python使用selenium和百度AI开放平台识别验证码自动登录

    文章目录 本文内容 工具准备 Python Packages 浏览器驱动 准备登录 第一步   用Chrome浏览器打开目标网站 第二步   调用selenium输入账户密码 第三步   获取图片验证 ...

  6. Python之模拟登录微博下载视频

    最近看到很多博主下载资源,其中有人就问:我们是搞程序出生的,能不能写段代码来实现微博下载视频资源呢? 当然,可以了,下面我使用python,来做一下演示. 1.借助JavaScript将页面滚动到最底 ...

  7. 最简单的python使用ddddocr模块在线识别验证码后登录

    import unittest from PIL import Image from selenium import webdriver from time import sleep import d ...

  8. 验证码模拟登录TestHome

    前面我们做了一个xsrf的知乎的模拟登录,那么今天将会给大家分享一下小弟写的一段带验证码的登录脚本. 今天我们要做的是testerhome的模拟登录,在做这个模拟登录的时候,我发现需要验证码才能登录. ...

  9. Python+selenium+firefox模拟登录微博并爬取数据(1

    1:环境python3.5,最新 firefox,selenium-3.14.0. 本来准备用无界面的,但是感觉效果不好看出来所以先用有界面的浏览器来做.分几次来慢慢写.这节先配置好环境. 2:安装: ...

最新文章

  1. NSArray和NSDictionary的混合
  2. 在windows下安装flex和bison、GCC
  3. Scrapy 框架入门
  4. hdu3555 Bomb 数位dp
  5. 用Zend Encoder加密PHP文件和PHP 优化配置
  6. M-JPEG、MPEG4、H.264都有何区别 依维安防论坛
  7. 易语言怎么判断文件是否一样_怎么判断专利代理人或专利代理机构是否靠谱?...
  8. VBA如何打开html文件6,VBA程序中如何自动打开网页
  9. 函数03 - 零基础入门学习C语言34
  10. python post 参数_python爬虫——requests库使用代理
  11. Excel基本操作技巧荟萃(值得您深入探讨 他懂了)
  12. urlrewrite java_Java中URL重写(urlrewrite+Maven)
  13. diskgenius创建efi分区_怎么创建efi系统分区?efi系统分区创建教程
  14. 《凤凰架构》读书笔记
  15. win10+Ubuntu20.04双系统安装
  16. validation
  17. wamp下localhost目录Your Projects下项目无法打开解决方案
  18. 1024_scsdn_徽章获取日_日常工作记录_百度图片爬取小程序
  19. iOS开发笔记--Facebook POP 进阶指南
  20. mstsc 后 不锁屏

热门文章

  1. IDEA2019运行PHP项目
  2. 错误1未能加载文件或程序集“System.Windows.Interactivity, Version=4.0.5.0, Culture=neutral, PublicKeyToken=31bf3
  3. 如果人生非要比作一场戏,我愿开头凄凉,结尾是圆满的。
  4. 爬王者荣耀动漫人物图片--python为例
  5. python 将pdf转换成txt
  6. 如何理解自相关和偏自相关图(最全面的讲解)
  7. ctfshow 网络迷踪-现拉现吃
  8. windows下升级nodejs
  9. 怎样安装java7,CentOS7怎样安装Java8
  10. Linux图形显示DRM框架学习