fix login 302

pull/302/head
文贤平 2019-09-01 14:41:37 +08:00
parent 363bce660e
commit 7f711d02a6
6 changed files with 49 additions and 39 deletions

View File

@ -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`,填上即可
- 浏览器截图![image](uml/REIL_DEVICEID.png)
- 登录302问题目前的解决办法为使用selenium打开浏览器获取devicesID之后在登录目前可以100%一次登录成功但是不能登录次数过多否则也是会302测试官网的登录也会302连自己的都不放过
- selenium教程[戳我](https://www.jianshu.com/p/8ec70859ae03)
- chromeDriver下载地址[戳我](http://chromedriver.storage.googleapis.com/index.html)
#### 感谢一下小伙伴对本项目提供的帮助
- @sun7127@126.com
- @ 才

View File

@ -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',

22
config/getCookie.py Normal file
View File

@ -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获取完成")

View File

@ -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

View File

@ -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)

View File

@ -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):
"""