微博验证码的识别并登录获取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.图片读取 从网 ...
随机推荐
- qt读取文本
直接 代码: // lyy : 2016/8/26 16:40:11 说明:读取文本 bool FileOpeartion:: GetTheTextContent (const QString str ...
- mac本地安装单机hadoop--学习笔记
Mac配置hadoop1.修改 /etc/hosts127.0.0.1 localhost2.下载hadoop2.9.0和jdk并安装配置相应环境 vim /etc/profile export HA ...
- 微信公众号 访问403问题,样式错乱,js失效
我服了,还是那个微信公众号小项目. 这个项目用的是ssm+velocity 问题的是,有时候页面加载会乱,js,css都加载不出来. 这个问题也是很久了,前几天开会,那个甲方医院很不开心,说是要找下家 ...
- day10整理(面对对象,过程,类和对象)
目录 一 回顾 (一)定义函数 (二)定义函数的三种形式 1.空函数 2.有参函数 3.无参函数 (三)函数的返回值 (四)函数的参数 1.形参 2.实参 二 面向过程编程 三 面向对象过程 四 类和 ...
- SpringBoot整合FastJson(七)
一.Maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson&l ...
- 【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!
目录 1.异常 1.1 异常概念 1.2 异常体系 1.3 异常分类 1.4 异常的产生过程解析 2. 异常的处理 2.1 抛出异常throw 2.2 Objects非空判断 2.3 声明异常thro ...
- 使用Magicodes.SwaggerUI快速配置SwaggerUI以及设置API分组
Magicodes.SwaggerUI 快速配置和集成SwaggerUI 特点 通过配置文件简单配置即可完成SwaggerUI的API格式JSON生成和集成 支持API分组和隐藏 支持自定义页面和验证 ...
- 学习笔记47_关于Session局限性问题,Memcache
三大问题: 1.Session性能问题 2.不能稳定输出.考虑使用进程外Session 3.组成集群,登录数据进行共享 (比如说像百度,百度网盘,百度文库等是使用不同的服务机器的,怎样避免使用的时候不 ...
- 【原创】(十)Linux内存管理 - zoned page frame allocator - 5
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- 微服务SpringCloud之GateWay服务化和过滤器
Spring Cloud Gateway 提供了一种默认转发的能力,只要将 Spring Cloud Gateway 注册到服务中心,Spring Cloud Gateway 默认就会代理服务中心的所 ...