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