12306模拟登陆-超级鹰

12306模拟登陆-超级鹰

什么是超级鹰?

就是和云打码类似的验证码识别网站,但是他能识别更复杂的图片验证码

模拟登陆12306

主要思路

1.首先登陆到12306界面

2.点击账号密码登录,到账号密码登录模块

3.截取整张界面的图片保存到本地,并获取验证码部分的坐标

4.在界面截图的基础上,根据获取的坐标截取验证码的图片保存到本地

5.把图片交给超级鹰,返回结果

6.把结果解析成想要点击的坐标

7.输入账号密码,执行验证码点击,点击登录

8.ok,但是有几率无法识别验证码

from selenium import webdriver
import chaojiying as cj
import time
#动作链,点击验证码
from selenium.webdriver import ActionChains
#图片处理,截图用
from PIL import Image
#实现规避检测
from selenium.webdriver import ChromeOptions
#12306登录url
url="https://kyfw.12306.cn/otn/resources/login.html"

#规避检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])

chrome=webdriver.Chrome(executable_path="chromedriver",options=option)
chrome.maximize_window()

#发起请求
chrome.get(url)
time.sleep(3)

#切换到账号密码登录
#找到切换按钮
button=chrome.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')
#点击切换到账号密码登录
button.click()
time.sleep(5)

#获取验证码图片的标签对象
code_img=chrome.find_element_by_xpath('//*[@id="J-loginImg"]')
#获取验证码图片的左上角x,y坐标位置
img_location=code_img.location
#获取验证码图片的长宽
img_size=code_img.size
#图片左上角和右下角的坐标
rangle=(
    int(img_location['x']), int(img_location['y']),int(img_location['x'] + img_size['width']),int(img_location['y'] + img_size['height'])
)
time.sleep(2)

#截取整张界面的图片
chrome.save_screenshot("12306.png")
html_img=Image.open("12306.png")
time.sleep(2)

#设置截图后的名字
code_img_name="code.png"
#截取验证码部分的图片
frame=html_img.crop(rangle)
#保存验证码截图
frame.save(code_img_name)
time.sleep(2)

#将图片发给超级鹰识别获取结果,zx为封装的接口
result=cj.zx()

#解决返回结果,创建点击列表
all_location=[]
if '|' in result['pic_str']:
    lo_list=result['pic_str'].split('|')
    for i in lo_list:
        lo_list=[]
        x=int(i.split(',')[0])
        y=int(i.split(',')[1])
        lo_list.append(x)
        lo_list.append(y)
        all_location.append(lo_list)
else:
    lo_list = []
    x=int(result['pic_str'][0])
    y=int(result['pic_str'][1])
    lo_list.append(x)
    lo_list.append(y)
    all_location.append(lo_list)

for i in all_location:
    x=i[0]
    y=i[1]
    ActionChains(chrome).move_to_element_with_offset(code_img,x,y).click().perform()
    time.sleep(1)

#输入账号
chrome.find_element_by_id('J-userName').send_keys("******")
#输入密码
chrome.find_element_by_id('J-password').send_keys('******')
time.sleep(2)

#点击登录
chrome.find_element_by_id('J-login').click()
time.sleep(10)

chrome.quit()

原文地址:https://www.cnblogs.com/zx125/p/11488639.html

时间: 2024-10-09 01:50:51

12306模拟登陆-超级鹰的相关文章

selenium 12306模拟登陆

代码应用场景 :基于第三方打码网站模拟登陆12306 验证码识别 基于第三方平台超级鹰识别 超级鹰官网:http://www.chaojiying.com/user/ 超级鹰使用流程: 注册 登陆(用户中心)充值 创建一个软件:软件ID->生成一个软件ID(901977) 下载实例代码->开发文档->python 1. 重新封装在打码平台下载到的python代码 #!/usr/bin/env python # coding:utf-8 import requests from hashl

模拟登陆 12306网站

目录 模拟登陆 12306网站 准备 需求分析 实现代码 原文地址:https://www.cnblogs.com/guokaifeng/p/11695389.html

使用C#发送Http 请求实现模拟登陆(以博客园为例)

原文:使用C#发送Http 请求实现模拟登陆(以博客园为例) 模拟登陆的原理很简单,就是发送一个Http 请求服务器获得响应,然后客户端获取到cookie即可实现模拟登陆,比如一些抢票软件的原理无非也是这样模拟客户端的cookie 然后发送请求去抢票,然后12306 本文将演示如何用C# 来实现模拟登陆的,推荐一款工具Fiddler,这是一款监听http 请求的利器.废话不多说,我就以博客园为例来实现模拟登陆.首先我登陆博客园 http://passport.cnblogs.com/login.

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

模拟登陆国内著名知识交流网站

之前看了很长时间的前端相关知识,怕python手生,写个模拟登陆恢复一下 zhihu网上的info有些是需要登陆后才能访问爬去的,所以不妨试一试 1 首先自己登陆,然后用fiddler进行抓包 发现登陆zhihu需要post以下data: A?, 验证码哪去了,算了,没有更好. 下面就要编写代码了,稍等,先看一下zhihu的response resp的类型是json格式,经过检查,msg的值就是我们的登录状态了,所以一会我们会打印出这个值证明是否登录. 2 下面就不多说了,直接上代码 #!/us

模拟登陆、Cookie传递

---恢复内容开始--- 上个月月底把模拟登陆的问题解决了,现在有时间就正好记录并复习一下. 主要使用httpclient 来进行模拟登陆 首先做一个登陆布局  一直以来都是简单拖几个控件 没有啥特效  这次我想使用一点 Material Design设计风格    查了一下 TextInputLayout这个控件  还不错 TextInputLayout 来自于 Android Design Support Library    可以让edittext的hint在用户输入的时候  自动跳到上方

Python——新浪微博爬虫之模拟登陆

在编写微博爬虫的过程中,免不了要进行模拟登录,因为新浪微博不登陆只能访问少量的微博信息. 然而,由于新浪微博的反爬虫功能在不断更新,例如改变了密码的加密算法(RSA),以前的一些模拟登陆方式已经不适用了.所以一开始试了好几种方法,均不能成功.后来受http://www.jb51.net/article/46053.htm启发,已经实现了. 目前,亲测能用的步骤是:①通过预登录,使用GET方法,获得登录所需的servertime, nonce, pubkey, rsakv:②使用encode64加

PHP实现curl和snoopy类模拟登陆方法

Snoopy.class.php下载 方法/步骤 第一种:使用snoopy类实现模拟登陆 1.在网上下载一个Snoopy.class.php的文件   2.代码实现: <?php set_time_limit(0); require "Snoopy.class.php"; $snoopy=new Snoopy(); $snoopy->referer='你要模拟登陆的域名';//例如:http://www.baidu.com/ $snoopy->agent="

作业---模拟登陆

# 模拟登陆:# 1. 用户输入帐号密码进行登陆# 2. 用户信息保存在文件内# 3. 用户密码输入错误三次后锁定用户 user.txt文件内容: {"alex":"zs123","zs":"zs123","ls":"zs123"} lock.txt文件内容: 为空 代码如下: f = open("user.txt","r",encoding=&q