微博验证码的识别并登录获取cookies
记得以前微博是用的宫格验证码,现在宫格已经被弃用了,用的是滑块验证码和 点触验证码,每天登陆的第一次基本用的是滑块,继续登录就都用的是点触验证码。所以滑块验证码不写,感兴趣的可以补上。
代码:
这里用的超级鹰的打码平台,要去超级鹰下载对应的API,并按提示修改,顺便购买一些题分,很便宜。
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from PIL import Image
from io import BytesIO
from selenium.webdriver import ActionChains
import time
from requests import Session
from weibo.chaojiying import Chaojiying_Client
from selenium.common.exceptions import TimeoutException
from weibo.crack import Crack EMAIL='1819241****'#微博账号
PASSWORD='*******'#微博密码
# 超级鹰用户名,密码,软件id,验证码类型
CHAOJIYING_USERNAME='1819241****'
CHAOJIYING_PASSWORD='********'
CHAOJIYING_SOFT_ID=902020
CHAOJIYING_KIND=9004
class weibo_click():
def __init__(self,username,password):
self.url = "https://passport.weibo.cn/signin/login"
self.email = username
self.password = password
self.browser = webdriver.Chrome()
# self.get=self
self.wait = WebDriverWait(self.browser, 15)
self.chaojiying = Chaojiying_Client(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)
def open(self):
email = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input#loginName")))
password = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input#loginPassword")))
email.send_keys(self.email)
time.sleep(2)
password.send_keys(self.password)
time.sleep(2)
def login(self):
submit = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.btn")))
submit.click()
# time.sleep(1)
# print("登陆成功!")
def get_geetest_button(self):
button = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.geetest_radar_tip")))
button.click()
def go(self):
self.browser.get(self.url)
self.browser.maximize_window()
self.open()
time.sleep(1)
self.login()
# self.get_geetest_button() def get_screenshot(self): # 截图功能
screenshot = self.browser.get_screenshot_as_png()
screenshot = Image.open(BytesIO(screenshot))
return screenshot
def get_position(self):
'''
获取点触验证码位置
:return: 点触验证码位置元组
'''
img=self.get_weibo_element()
# img =self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, "geetest_item_img ")))
time.sleep(1)
location = img.location
size = img.size
print(location)
print(size)
top, bottom, left, right = location["y"], location["y"] + size["height"], location["x"], \
location["x"] + size["width"]
return (top, bottom, left, right)
def click_image(self):
'''
点触验证码截图
:return: 点触验证码对象
'''
top, bottom, left, right = self.get_position()
print("验证码位置", top, bottom, left, right)
screenshot = self.get_screenshot()
# screenshot.show()
print('大图尺寸,', screenshot.size)
captcha = screenshot.crop((833, 200, 1252, 632)) # crop方法是Image里的截图方法 先后顺序有规定(左,上,右,下)
captcha.save('bbb.png')
# captcha.show()
print('小图尺寸,', captcha.size)
# img = Image.open(name)
(x, y) = captcha.size
x_s = 334
y_s = round(y * x_s / x)
out_img = captcha.resize((x_s, y_s), Image.ANTIALIAS)
out_img.save('ccc.png')
# out_img.show()
return out_img
def result(self):
image = self.click_image()
bytes_array = BytesIO()
image.save(bytes_array, format='PNG')
# 识别验证码
result = self.chaojiying.PostPic(bytes_array.getvalue(), CHAOJIYING_KIND)
return result
def get_points(self, captcha_result):
'''
解析识别结果
:param captcha_result: 识别结果
:return: 转化后的结果
'''
groups = captcha_result.get('pic_str').split('|')
locations = [[int(number) for number in group.split(',')] for group in groups]
print(locations)
return locations
def get_weibo_element(self):
'''
获取点触验证码对象
:return: 图片对象
'''
element = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, "geetest_item_img ")))
return element
def weibo_click_words(self,locations):
'''
点击验证码图片
:param locations: 点击位置
:return: None
'''
for location in locations:
print(location)
ActionChains(self.browser).move_to_element_with_offset(self.get_weibo_element(),location[0],location[1]).click().perform()
time.sleep(1) def confirm(self):
push=self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.geetest_commit_tip")))
push.click()
def main(self):
print('点触验证码的验证')
while True:
captcha_result = self.result()
locations = self.get_points(captcha_result)
self.weibo_click_words(locations)
button = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.geetest_commit_tip")))
button.click()
if self.login_successfully():
break
else:
continue def password_error(self):
"""
判断是否密码错误
:return:
"""
try:
return WebDriverWait(self.browser, 5).until(
EC.text_to_be_present_in_element((By.ID, 'errorMsg'), '用户名或密码错误'))
except TimeoutException:
return False def login_successfully(self):
"""
判断是否登录成功
:return:
"""
try:
return bool(
WebDriverWait(self.browser, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div.m-text-cut"))))
except TimeoutException:
return False def get_cookies(self):
"""
获取Cookies
:return:
"""
return self.browser.get_cookies() def man(self):
"""
破解入口
:return:
"""
self.go()
# 验证账号和密码
if self.password_error():
return {
'status': 2,
'content': '用户名或密码错误'
} # 账号密码没错就获取图片对象
self.get_geetest_button()
self.main()
# 判断是否登录成功
if self.login_successfully():
cookies = self.get_cookies()
print('cookies',cookies)
return {
'status': 1,
'content': cookies
}
else:
return {
'status': 3,
'content': '登录失败'
} if __name__=="__main__":
result=weibo_click(EMAIL,PASSWORD).man()
print(result.get('status'))
微博验证码的识别并登录获取cookies的更多相关文章
- httpwebrequest 模拟登录 获取cookies 以前的代码,记录备忘!
2个类,一个基类,一个构建头信息调用类 关于如何获取到post中的内容,你之需要用http抓包工具把你与目标网站的请求信息抓下来后,打开分析下按照抓下来的包中的数 据进行构建就行了 using Sys ...
- 终极利器!利用appium和mitmproxy登录获取cookies
环境搭建 参考我之前写的https://www.cnblogs.com/c-x-a/p/9163221.html appium 代码start_appium.py # -*- coding: utf- ...
- python自动化登录获取图片登录验证码
主要记录一下:图片验证码1.获取登录界面的图片2.获取验证码位置3.在登录页面截取验证码保存4.调用百度api识别(目前准确率较高的识别图片api)本次登录的系统页面,可以看到图片验证码的位置登录页面 ...
- python接口自动化测试七:获取登录的Cookies,并关联到下一个请求
获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cookies=loginCookies 此方法需每一次都调用登录方法,并且每一次发送请求 ...
- python接口自动化测试七:获取登录的Cookies
python接口自动化测试七:获取登录的Cookies,并关联到下一个请求 获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cooki ...
- Python爬虫学习笔记之微信宫格验证码的识别(存在问题)
本节我们将介绍新浪微博宫格验证码的识别.微博宫格验证码是一种新型交互式验证码,每个宫格之间会有一条 指示连线,指示了应该的滑动轨迹.我们要按照滑动轨迹依次从起始宫格滑动到终止宫格,才可以完成验证,如 ...
- 用selenium获取cookies
前言:由于登录反爬措施的越来越麻烦,甚至出现了12306这种看图识物的无敌验证码,我只能说,我选择死亡.这就衍生出了使用selenium来获取获取cookies. 实例:获取qq空间cookies,亲 ...
- 爬虫(十二):图形验证码的识别、滑动验证码的识别(B站滑动验证码)
1. 验证码识别 随着爬虫的发展,越来越多的网站开始采用各种各样的措施来反爬虫,其中一个措施便是使用验证码.随着技术的发展,验证码也越来越花里胡哨的了.最开始就是几个数字随机组成的图像验证码,后来加入 ...
- python实现对简单的运算型验证码的识别【不使用OpenCV】
最近在写我们学校的教务系统的手机版,在前端用户执行绑定操作后,服务器将执行登录,但在登录过程中,教务系统中有个运算型的验证码,大致是这个样子的: 下面我们开始实现这个验证码的识别. 1.图片读取 从网 ...
随机推荐
- uni-app swiper设置自定义高度
话不多少先上图, 大家可以看到图片中红色区域是头部区域,黄色区域则是我们要滑动的区域. 大家可以在uni-app官网上看到swiper高度是默认100%,而swiper-item则是要有固定宽高的,要 ...
- zepto源码分析·event模块
准备知识 事件的本质就是发布/订阅模式,dom事件也不例外:先简单说明下发布/订阅模式,dom事件api和兼容性 发布/订阅模式 所谓发布/订阅模式,用一个形象的比喻就是买房的人订阅楼房消息,售楼处发 ...
- javascript实用代码片段
持续积累中~ 拓展原型 Function.prototype.method = function(name, extend) { if(!this.prototype[name]) { this.pr ...
- (一)django创建
1.打开终端,安装django:输入pip install django 2.创建django项目:django-admin startproject myweb 3.启动项目:进入到myweb,输入 ...
- 在windows下用with open 打开html文件报gbk错误
with open('xx.html' , 'rb' ,enconding='utf-8')as f: 可能原因是由于HTML是在Linux下开发的,与windons 系统编码不兼容
- yum安装PHP升级到7.1版本
yum安装PHP升级到7.2版本卸载原来低版本的PHP rpm -qa |grep php|xargs rpm -e 更新yum源 //CentOS/RHEL 7.xrpm -Uvh https:// ...
- 配置Docker镜像加速
1.在docker toolbox执行下面的命令进入VM bash docker-machine ssh default 2.执行下面的命令修改profile文件: sudo vi /var/lib/ ...
- 暑期集训20190726 跳动(skip)
[题目描述] 福州三中的操场上有着数不尽的跳动的小朋友. 当然善于思考的你总能从中发掘出不一样的问题 福州三中的跑道是一个n个格子围成的圆形,从0~n-1编号,有m个同学,第i个同学步长为a[i], ...
- Birt报表
研究了两天终于发现开始学会了BIRT报表的开发流程. 第一步:到http://www.eclipse.org/downloads/下载 Eclipse IDE for Java and Report ...
- Anaconda的安装和详细介绍(带图文)
Anacond的介绍 Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项. 因为包含了大量的科学包,Anaconda 的下载文件比较大( ...