mirror of https://github.com/testerSunshine/12306
fix login 302
parent
363bce660e
commit
7f711d02a6
|
@ -94,11 +94,10 @@
|
||||||
- 如果下载验证码过期或者下载失败的问题,应该是12306封ip的策略,多重试几次,12306现在封服务器(阿里云和腾讯云)ip比较严重,尽量不要放在服务器里面
|
- 如果下载验证码过期或者下载失败的问题,应该是12306封ip的策略,多重试几次,12306现在封服务器(阿里云和腾讯云)ip比较严重,尽量不要放在服务器里面
|
||||||
- 目前12306对服务器ip比较敏感,大家还是在自己家里挂着吧
|
- 目前12306对服务器ip比较敏感,大家还是在自己家里挂着吧
|
||||||
- 自动更换ip软件目前已支持TPLINK和小米路由器,只限家庭网络[点我跳转](https://github.com/testerSunshine/AutoRouterIP)
|
- 自动更换ip软件目前已支持TPLINK和小米路由器,只限家庭网络[点我跳转](https://github.com/testerSunshine/AutoRouterIP)
|
||||||
- 关于登录接口需要识别DEVICES_ID的情况,可以使用本地打开12306,在任意一接口里面抓取DEVICES_ID,填于[login.py](init/login.py)文件中的141行
|
- 登录302问题目前的解决办法为使用selenium打开浏览器获取devicesID之后,在登录,目前可以100%一次登录成功,但是不能登录次数过多,否则也是会302,测试官网的登录也会302(连自己的都不放过)
|
||||||
- 原来的 d`evicesId = eval(devicesIdRsp.split("(")[1].split(")")[0].replace("'", ""))["dfp"]`
|
- selenium教程[戳我](https://www.jianshu.com/p/8ec70859ae03)
|
||||||
- 更换为 `devicesId = 刚才抓取的DEVICES_ID`,填上即可
|
- chromeDriver下载地址[戳我](http://chromedriver.storage.googleapis.com/index.html)
|
||||||
- 浏览器截图
|
|
||||||
|
|
||||||
#### 感谢一下小伙伴对本项目提供的帮助
|
#### 感谢一下小伙伴对本项目提供的帮助
|
||||||
- @sun7127@126.com
|
- @sun7127@126.com
|
||||||
- @ 才
|
- @ 才
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# 刷票模式:1=刷票 2=候补
|
# 刷票模式:1=刷票 2=候补
|
||||||
TICKET_TYPE = 2
|
TICKET_TYPE = 1
|
||||||
|
|
||||||
# 候补最晚兑现日期,如果是候补订单,这个值一定要填
|
# 候补最晚兑现日期,如果是候补订单,这个值一定要填
|
||||||
# 格式为日期+小时+分
|
# 格式为日期+小时+分
|
||||||
|
@ -8,12 +8,12 @@ J_Z_PARAM = "2019-09-10#22#59"
|
||||||
|
|
||||||
# 出发日期(list) "2018-01-06", "2018-01-07"
|
# 出发日期(list) "2018-01-06", "2018-01-07"
|
||||||
STATION_DATES = [
|
STATION_DATES = [
|
||||||
"2019-09-30"
|
"2019-09-06"
|
||||||
]
|
]
|
||||||
|
|
||||||
# 填入需要购买的车次(list),"G1353"
|
# 填入需要购买的车次(list),"G1353"
|
||||||
STATION_TRAINS = [
|
STATION_TRAINS = [
|
||||||
"G1377"
|
"G1373"
|
||||||
]
|
]
|
||||||
|
|
||||||
# 出发城市,比如深圳北,就填深圳就搜得到
|
# 出发城市,比如深圳北,就填深圳就搜得到
|
||||||
|
@ -44,12 +44,12 @@ IS_MORE_TICKET = False
|
||||||
# - "张三"
|
# - "张三"
|
||||||
# - "李四"
|
# - "李四"
|
||||||
TICKET_PEOPLES = [
|
TICKET_PEOPLES = [
|
||||||
""
|
"文贤平"
|
||||||
]
|
]
|
||||||
|
|
||||||
# 12306登录账号
|
# 12306登录账号
|
||||||
USER = ""
|
USER = "931128603@qq.com"
|
||||||
PWD = ""
|
PWD = "QWERTY"
|
||||||
|
|
||||||
# 加入小黑屋时间默认为5分钟,此功能为了防止僵尸票导致一直下单不成功错过正常的票
|
# 加入小黑屋时间默认为5分钟,此功能为了防止僵尸票导致一直下单不成功错过正常的票
|
||||||
TICKET_BLACK_LIST_TIME = 5
|
TICKET_BLACK_LIST_TIME = 5
|
||||||
|
@ -72,11 +72,11 @@ IS_AUTO_CODE = True
|
||||||
# host: "smtp.qq.com"
|
# host: "smtp.qq.com"
|
||||||
EMAIL_CONF = {
|
EMAIL_CONF = {
|
||||||
"IS_MAIL": True,
|
"IS_MAIL": True,
|
||||||
"email": "",
|
"email": "931128603@qq.com",
|
||||||
"notice_email_list": "",
|
"notice_email_list": "931128603@qq.com",
|
||||||
"username": "",
|
"username": "931128603@qq.com",
|
||||||
"password": "",
|
"password": "lwvgfrcydzyvbfjf",
|
||||||
"host": "",
|
"host": "smtp.qq.com",
|
||||||
}
|
}
|
||||||
|
|
||||||
# 是否开启 pushbear 微信提醒, 使用前需要前往 http://pushbear.ftqq.com 扫码绑定获取 send_key 并关注获得抢票结果通知的公众号
|
# 是否开启 pushbear 微信提醒, 使用前需要前往 http://pushbear.ftqq.com 扫码绑定获取 send_key 并关注获得抢票结果通知的公众号
|
||||||
|
@ -106,6 +106,9 @@ IS_PROXY = 0
|
||||||
# 预售放票时间, 如果是捡漏模式,可以忽略此操作
|
# 预售放票时间, 如果是捡漏模式,可以忽略此操作
|
||||||
OPEN_TIME = "13:00:00"
|
OPEN_TIME = "13:00:00"
|
||||||
|
|
||||||
|
# chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html
|
||||||
|
CHROME_PATH = ""
|
||||||
|
|
||||||
PASSENGER_TICKER_STR = {
|
PASSENGER_TICKER_STR = {
|
||||||
'一等座': 'M',
|
'一等座': 'M',
|
||||||
'特等座': 'P',
|
'特等座': 'P',
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
import time
|
||||||
|
import TickerConfig
|
||||||
|
|
||||||
|
|
||||||
|
def getDrvicesID(session):
|
||||||
|
"""
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
print("cookie获取中")
|
||||||
|
from selenium import webdriver
|
||||||
|
cookies = []
|
||||||
|
driver = webdriver.Chrome(TickerConfig.CHROME_PATH)
|
||||||
|
driver.get("https://www.12306.cn/index/index.html")
|
||||||
|
time.sleep(10)
|
||||||
|
for c in driver.get_cookies():
|
||||||
|
cookie = dict()
|
||||||
|
if c.get("name") == "RAIL_DEVICEID" or c.get("name") == "RAIL_EXPIRATION":
|
||||||
|
cookie[c.get("name")] = c.get("value")
|
||||||
|
cookies.append(cookie)
|
||||||
|
if cookies:
|
||||||
|
session.httpClint.set_cookies(cookies)
|
||||||
|
print("cookie获取完成")
|
|
@ -18,16 +18,6 @@ class GoLogin:
|
||||||
self.is_auto_code = is_auto_code
|
self.is_auto_code = is_auto_code
|
||||||
self.auto_code_type = auto_code_type
|
self.auto_code_type = auto_code_type
|
||||||
|
|
||||||
# def auth(self):
|
|
||||||
# """
|
|
||||||
# 认证
|
|
||||||
# :return:
|
|
||||||
# """
|
|
||||||
# authUrl = self.session.urls["auth"]
|
|
||||||
# authData = {"appid": "otn"}
|
|
||||||
# tk = self.session.httpClint.send(authUrl, authData)
|
|
||||||
# return tk
|
|
||||||
|
|
||||||
def auth(self):
|
def auth(self):
|
||||||
"""
|
"""
|
||||||
:return:
|
:return:
|
||||||
|
@ -52,6 +42,9 @@ class GoLogin:
|
||||||
codeCheckUrl = copy.deepcopy(self.session.urls["codeCheck1"])
|
codeCheckUrl = copy.deepcopy(self.session.urls["codeCheck1"])
|
||||||
codeCheckUrl["req_url"] = codeCheckUrl["req_url"].format(self.randCode, int(time.time() * 1000))
|
codeCheckUrl["req_url"] = codeCheckUrl["req_url"].format(self.randCode, int(time.time() * 1000))
|
||||||
fresult = self.session.httpClint.send(codeCheckUrl)
|
fresult = self.session.httpClint.send(codeCheckUrl)
|
||||||
|
if not isinstance(fresult, str):
|
||||||
|
print("登录失败")
|
||||||
|
return
|
||||||
fresult = eval(fresult.split("(")[1].split(")")[0])
|
fresult = eval(fresult.split("(")[1].split(")")[0])
|
||||||
if "result_code" in fresult and fresult["result_code"] == "4":
|
if "result_code" in fresult and fresult["result_code"] == "4":
|
||||||
print(u"验证码通过,开始登录..")
|
print(u"验证码通过,开始登录..")
|
||||||
|
@ -133,15 +126,6 @@ class GoLogin:
|
||||||
if loginConf(self.session):
|
if loginConf(self.session):
|
||||||
self.auth()
|
self.auth()
|
||||||
|
|
||||||
devicesIdUrl = copy.deepcopy(self.session.urls["getDevicesId"])
|
|
||||||
devicesIdUrl["req_url"] = devicesIdUrl["req_url"].format(int(time.time() * 1000))
|
|
||||||
# devicesIdRsp = self.session.httpClint.send(devicesIdUrl)
|
|
||||||
# devicesId = eval(devicesIdRsp.split("(")[1].split(")")[0].replace("'", ""))["dfp"]
|
|
||||||
devicesId = "K1OnaaicUR1DrGl2vRS1HrLLna8UBoXkESCnuPMBzVtrO6fG4URi2RWJHpM7urYlYx-fpp0AeM4Ca8rNN4WyYv1X493VsH5yejsLNol7XZ74gRp8yE7eEDHYU87t1urn3Oeaifrjrd5FRTmk3WCNylKeE2UQhPRH"
|
|
||||||
|
|
||||||
if devicesId:
|
|
||||||
self.session.httpClint.set_cookies(RAIL_DEVICEID=devicesId)
|
|
||||||
|
|
||||||
result = getPassCodeNewOrderAndLogin1(session=self.session, imgType="login")
|
result = getPassCodeNewOrderAndLogin1(session=self.session, imgType="login")
|
||||||
if not result:
|
if not result:
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -12,6 +12,7 @@ from agency.cdn_utils import CDNProxy
|
||||||
from config import urlConf, configCommon
|
from config import urlConf, configCommon
|
||||||
from config.TicketEnmu import ticket
|
from config.TicketEnmu import ticket
|
||||||
from config.configCommon import seat_conf_2, seat_conf
|
from config.configCommon import seat_conf_2, seat_conf
|
||||||
|
from config.getCookie import getDrvicesID
|
||||||
from init.login import GoLogin
|
from init.login import GoLogin
|
||||||
from inter.AutoSubmitOrderRequest import autoSubmitOrderRequest
|
from inter.AutoSubmitOrderRequest import autoSubmitOrderRequest
|
||||||
from inter.ChechFace import chechFace
|
from inter.ChechFace import chechFace
|
||||||
|
@ -32,7 +33,6 @@ class select:
|
||||||
"""
|
"""
|
||||||
快速提交车票通道
|
快速提交车票通道
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.get_ticket_info()
|
self.get_ticket_info()
|
||||||
self._station_seat = [seat_conf[x] for x in TickerConfig.SET_TYPE]
|
self._station_seat = [seat_conf[x] for x in TickerConfig.SET_TYPE]
|
||||||
|
@ -142,6 +142,7 @@ class select:
|
||||||
self.cdn_certification()
|
self.cdn_certification()
|
||||||
l = liftTicketInit(self)
|
l = liftTicketInit(self)
|
||||||
l.reqLiftTicketInit()
|
l.reqLiftTicketInit()
|
||||||
|
getDrvicesID(self)
|
||||||
self.call_login()
|
self.call_login()
|
||||||
check_user = checkUser(self)
|
check_user = checkUser(self)
|
||||||
t = threading.Thread(target=check_user.sendCheckUser)
|
t = threading.Thread(target=check_user.sendCheckUser)
|
||||||
|
|
|
@ -41,14 +41,15 @@ class HTTPClient(object):
|
||||||
self._s.headers.update(_set_header_default())
|
self._s.headers.update(_set_header_default())
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def set_cookies(self, **kwargs):
|
def set_cookies(self, kwargs):
|
||||||
"""
|
"""
|
||||||
设置cookies
|
设置cookies
|
||||||
:param kwargs:
|
:param kwargs:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
for k, v in kwargs.items():
|
for kwarg in kwargs:
|
||||||
self._s.cookies.set(k, v)
|
for k, v in kwarg.items():
|
||||||
|
self._s.cookies.set(k, v)
|
||||||
|
|
||||||
def get_cookies(self):
|
def get_cookies(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue