验证码破解 | Selenium模拟登陆12306
12306官网登录的验证码破解比较简单,验证码是常规的点触类型验证码,使用超级鹰识别率比较高。
思路:
(1)webdriver打开浏览器;
(2)先对整个屏幕截屏,通过标签定位找到验证码图片,并定位到验证码图片的坐标,然后从先前截屏的图片中截取验证码部分的图片;
(3)通过超级鹰识别验证码上字的坐标;
(4)点击验证码图片上的字;
(5) 输入用户名和密码进行登录;
注意:将以下标红部分的账号等信息换成自己的即可成功
from selenium import webdriver
from selenium.webdriver import ActionChains
from chaojiying import Chaojiying
from PIL import Image
import time # 用户名和密码是自己的12306账号的用户名和密码
USERNAME =
PASSWORD = class Huochepiao(): def __init__(self):
self.bro = webdriver.Chrome()
self.url = 'https://kyfw.12306.cn/otn/login/init' def open_browser(self):
self.bro.get(self.url)
time.sleep(5) # def __del__(self):
# self.bro.quit() def find_code_img(self):
# 定位到验证码图片对应的img标签
code_img = self.bro.find_element_by_class_name('touclick-img-par')
location = code_img.location
size = code_img.size
return (location,size) def get_code_img(self,location,size):
# rangle对应的就是验证码图片的裁剪区域
rangle = (int(location['x']), int(location['y']), int(location['x'] + size['width']), int(location['y'] + size['height']))
self.bro.save_screenshot('aa.png')
i = Image.open('./aa.png')
frame = i.crop(rangle) # 根据指定区域实现裁剪
frame.save('code.png') def get_words_locations(self):
chaojiying = Chaojiying(username, password, softID) # 超级鹰账号、密码和ID更换即可
im = open('./code.png', 'rb').read()
print("超级鹰识别结果:",chaojiying.post_pic(im, 9004))
result = chaojiying.post_pic(im, 9004)['pic_str']
print("result:",result) # "x1,y1|x2,y2" --> [['x1','y1'],['x2','y2']] "x,y" --> [['x','y']]
all_coorodinates = []
if '|' in result:
li = result.split('|')
count = len(li)
for i in range(count):
xy_list = []
x = int(li[i].split(',')[0])
y = int(li[i].split(',')[1])
xy_list.append(x)
xy_list.append(y)
all_coorodinates.append(xy_list)
else:
x = int(result.split(',')[0])
y = int(result.split(',')[1])
xy_list = []
xy_list.append(x)
xy_list.append(y)
all_coorodinates.append(xy_list)
print(all_coorodinates)
return all_coorodinates def touch_click_words(self, coorodinates):
code_img = self.bro.find_element_by_class_name('touclick-img-par') for coorodinate in coorodinates:
x = coorodinate[0]
y = coorodinate[1]
ActionChains(self.bro).move_to_element_with_offset(code_img, x, y).click().perform() def login(self):
self.bro.find_element_by_id('username').send_keys(USERNAME)
self.bro.find_element_by_id('password').send_keys(PASSWORD)
self.bro.find_element_by_id('loginSub').click()
time.sleep(10) def run(self): # 1 打开浏览器
self.open_browser() # 2 找到并获取验证码图片
location,size = self.find_code_img()
self.get_code_img(location,size) # 3 识别验证码上字的坐标
all_coorodinates = self.get_words_locations() # 4 点击验证码图片上的字
self.touch_click_words(all_coorodinates) # 5 登录
self.login() if __name__ == "__main__":
hcp = Huochepiao()
hcp.run()
输出结果:
result: 186,86
[[186, 86]]

注意:本篇博文仅供学习交流相关的爬虫知识,请勿过度使用,如有任何纠纷,与本人无关。(瑟瑟发抖)
验证码破解 | Selenium模拟登陆12306的更多相关文章
- 验证码破解 | Selenium模拟登陆微博
模拟登陆微博相对来说,并不难.验证码是常规的5个随机数字字母的组合,识别起来也比较容易.主要是用到许多Selenium中的知识,如定位标签.输入信息.点击等.如对Selenium的使用并不熟悉,请先移 ...
- 验证码破解 | Selenium模拟登录简书
使用超级鹰打码平台处理登录的文字点击验证码 import time from io import BytesIO from PIL import Image from selenium import ...
- 验证码破解 | Selenium模拟登录知乎
import requests import re import execjs import time import hmac from hashlib import sha1 class Zhi ...
- Selenium模拟登陆百度贴吧
Selenium模拟登陆百度贴吧 from selenium import webdriver from time import sleep from selenium.webdriver.commo ...
- selenium 模拟登陆豆瓣,爬取武林外传的短评
selenium 模拟登陆豆瓣,爬去武林外传的短评: 在最开始写爬虫的时候,抓取豆瓣评论,我们从F12里面是可以直接发现接口的,但是最近豆瓣更新,数据是JS异步加载的,所以没有找到合适的方法爬去,于是 ...
- 使用selenium模拟登陆新浪微博
1.selenium基本使用 1.selenium安装及基本操作 selenium是一个自动化测试工具,它支持各种浏览器,包括Chrome,Safari,Firefox等主流界面浏览器驱动,也包括Ph ...
- 使用selenium模拟登陆淘宝、新浪和知乎
如果直接使用selenium访问淘宝.新浪和知乎这些网址.一般会识别出这是自动化测试工具,会有反制措施.当开启开发者模式后,就可以绕过他们的检测啦.(不行的,哭笑) 如果网站只是对windows.na ...
- python selenium模拟登陆163邮箱。
selenium是可以模拟浏览器操作. 有些爬虫是异步加载的,通过爬取网页源码是得不到需要的内容.所以可以模拟浏览器去登陆该网站进行爬取操作. 需要安装selenium通过pip install xx ...
- Python爬虫 —— 知乎之selenium模拟登陆获取cookies+requests.Session()访问+session序列化
代码如下: # coding:utf-8 from selenium import webdriver import requests import sys import time from lxml ...
随机推荐
- 啊哈!算法(第二章)C#实现
第 1 节 解密 QQ 号——队列 新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问 QQ 号,小哈当然不会直接告诉小哼啦,原因嘛你懂的. 所以小哈给了小哼一串加密过的数字, ...
- PowerBuilder学习笔记之14用户自定义对象
教程链接:https://wenku.baidu.com/view/9730d1c7aa00b52acec7ca05.html?re=view&rec_flag=default&sxt ...
- java自定义异常和throw、throws的使用
一.自定义异常类 我们知道所有的异常都是Exception,所以我们需要自定义异常只需要继承那个Exception类就可以了.下面我们自定义一个异常类,代码如下: /** * 自定义异常, */ // ...
- 使用PS打开图片的常见姿势
我们经常会使用PS对现有的图片进行编辑.所以每个人都会经历打开图片这一步骤. 下面为大家介绍一下PS打开图片的这一步的常见方式吧: 第一种:使用文件资源管理器(也就是双击我的电脑弹出来的窗口) 第二种 ...
- MVC中使用SignalR打造酷炫实用的即时通讯功能(轉載)
資料來源:http://www.fangsi.net/1144.html 前言,现在这世道写篇帖子没个前言真不好意思发出来.本贴的主要内容来自于本人在之前项目中所开发的一个小功能,用于OA中的即时通讯 ...
- spring Boot 学习(八、Spring Boot与与监控管理)
一.监控管理通过引入spring-boot-starter-actuator,可以使用Spring Boot为我们提供的准 生产环境下的应用监控和管理功能.我们可以通过HTTP,JMX,SSH协议来进 ...
- Entity Framework 学习系列(1) - 认识理解Entity Framework
目录 写在前面 什么是Entity Framework EF的优缺点 1.优点 2.缺点 如何理解ORM EF执行的原理 写在前面 在使用.net mvc 开发的时候.为了高效的开发,我们常常会搭配O ...
- 如何在JIRA中有效使用关注和@提及 我正在关注的问题 提及我的问题 在仪表板上显示
如何在JIRA中有效使用关注和@提及http://bbs.51testing.com/forum.php?mod=viewthread&tid=1157043&fromuid=1530 ...
- 前端1-----CSS颜色属性,字体文本和背景属性,边框属性,margin和padding,盒模型,行内块转换,浮动,三大定位
前端1-----CSS颜色属性,字体文本和背景属性,边框属性,margin和padding,盒模型,行内块转换,浮动,三大定位 一丶css选择器的优先级 行内 > id选择器 > 类选择器 ...
- AI涉及到数学的一些面试题汇总
[LeetCode] Maximum Product Subarray的4种解法 leetcode每日解题思路 221 Maximal Square LeetCode:Subsets I II (2) ...