testerSunshine/12306

url: /passport/web/login返回参数为空, 接口状态码: 302

yrong opened this issue · 58 comments

yrong commented

描述问题

`
/home/ronyang/.pyenv/versions/3.6.4/bin/python /ssd/JetBrains/apps/PyCharm-C/ch-0/192.6262.63/helpers/pydev/pydevd.py --multiproc --qt-support=auto --client 127.0.0.1 --port 42091 --file /ssd/mypython/12306/run.py
pydev debugger: process 3321 is connecting

Connected to pydev debugger (build 192.6262.63)
Using TensorFlow backend.


检查当前版本为: 1.1.105
检查当前python版本为:3.6.4,目前版本只支持3.6以上
12306刷票小助手,最后更新于2019.09.03,请勿作为商业用途,交流群号: 1群:286271084(已满)
2群:649992274(已满)
3群:632501142(已满)
4群: 606340519(已满)
5群: 948526733(已满)
6群: 444101020(未满)
7群: 660689659(未满)

当前配置:
出发站:深圳北
到达站:隆回
乘车日期:2019-10-01
坐席:二等座
是否有票优先提交:True
乘车人:['']
刷新间隔: 随机(1-3S)
僵尸票关小黑屋时长: 5
下单接口: 2
下单模式: 2
预售踩点时间:13:00:00


开启cdn查询
本次待筛选cdn总数为1857, 筛选时间大约为5-10min
cookie获取中
cookie获取完成
需要验证码
下载验证码...
下载验证码成功

Corrupt JPEG data: 16 extraneous bytes before marker 0xd9

WARNING:tensorflow:From /home/ronyang/.pyenv/versions/3.6.4/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:3733: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.
Instructions for updating:
Please use rate instead of keep_prob. Rate should be set to rate = 1 - keep_prob.
2019-09-07 14:35:10.588215: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3192900000 Hz
2019-09-07 14:35:10.588544: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x5972b00 executing computations on platform Host. Devices:
2019-09-07 14:35:10.588566: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): ,
2019-09-07 14:35:10.676165: W tensorflow/compiler/jit/mark_for_compilation_pass.cc:1412] (One-time warning): Not using XLA:CPU for cluster because envvar TF_XLA_FLAGS=--tf_xla_cpu_global_jit was not set. If you want XLA:CPU, either set that envvar, or use experimental_jit_scope to enable XLA:CPU. To confirm that XLA is active, pass --vmodule=xla_compilation_cache=1 (as a proper command-line flag, not via TF_XLA_FLAGS) or set the envvar XLA_FLAGS=--xla_hlo_profile.
/home/ronyang/.pyenv/versions/3.6.4/lib/python3.6/site-packages/keras/engine/saving.py:310: UserWarning: No training configuration found in save file: the model was not compiled. Compile it manually.
warnings.warn('No training configuration found in save file: '
题目为['锦旗']
WARNING:tensorflow:From /home/ronyang/.pyenv/versions/3.6.4/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:2041: The name tf.nn.fused_batch_norm is deprecated. Please use tf.compat.v1.nn.fused_batch_norm instead.

/home/ronyang/.pyenv/versions/3.6.4/lib/python3.6/site-packages/keras/engine/saving.py:310: UserWarning: No training configuration found in save file: the model was not compiled. Compile it manually.
warnings.warn('No training configuration found in save file: '
1 调色板
2 棉棒
3 排风机
4 电子秤
5 锦旗
6 调色板
7 网球拍
8 锦旗
验证码识别坐标为40,149,256,149
40,149,256,149
验证码校验失败
需要验证码
下载验证码...
下载验证码成功
Corrupt JPEG data: 15 extraneous bytes before marker 0xd9
/home/ronyang/.pyenv/versions/3.6.4/lib/python3.6/site-packages/keras/engine/saving.py:310: UserWarning: No training configuration found in save file: the model was not compiled. Compile it manually.
warnings.warn('No training configuration found in save file: '
题目为['老虎']
/home/ronyang/.pyenv/versions/3.6.4/lib/python3.6/site-packages/keras/engine/saving.py:310: UserWarning: No training configuration found in save file: the model was not compiled. Compile it manually.
warnings.warn('No training configuration found in save file: '
1 电子秤
2 电线
3 排风机
4 茶盅
5 排风机
6 红酒
7 锦旗
8 老虎
验证码识别坐标为256,149
256,149
验证码通过,开始登录..
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
`

`
def baseLogin(self, user, passwd):
"""
登录过程
:param user:
:param passwd:
:return: 权限校验码
"""
logurl = self.session.urls["login"]

    loginData = OrderedDict()
    loginData["username"] = user,
    loginData["password"] = passwd,
    loginData["appid"] = "otn",
    loginData["answer"] = self.randCode,

    tresult = self.session.httpClint.send(logurl, loginData)
    **_if 'result_code' in tresult and **tresult**["result_code"] == 0:_**
        print(u"登录成功")
        tk = self.auth()
        if "newapptk" in tk and tk["newapptk"]:
            return tk["newapptk"]
        else:
            return False
    elif 'result_message' in tresult and tresult['result_message']:
        messages = tresult['result_message']
        if messages.find(u"密码输入错误") is not -1:
            raise UserPasswordException("{0}".format(messages))
        else:
            print(u"登录失败: {0}".format(messages))
            print(u"尝试重新登陆")
            return False
    else:
        return False

`
in debug mode, error as following

tresult = {dict} <class 'dict'>: {'code': 99999, 'message': '重试次数达到上限'}
 'code' (140346851125936) = {int} 99999
 'message' (140346850742768) = {str} '重试次数达到上限'
 __len__ = {int} 2

重现步骤

步骤一

截图&日志

环境信息

  • ubuntu18
  • python3.6.4
  • 订票小助手版本 1.1.105

额外的备注

  • Add any other context about the problem here.

预售任务会出现这个问题

yrong commented

不是,过半小时后重试成功了

不是,过半小时后重试成功了

我也遇到了,怎么解决

好像把COOKIE_TYPE = 2设置为COOKIE_TYPE = 1就可以

我的COOKIE_TYPE 给过1了 但是还是会这样 不管他过一会自己就可以登上去 了 每次都要失败好几次才能登陆成功

怎么搞啊,我设置的1还是不行

yrong commented

@Yubiao-Li 别叫唤,关机等半小时再启

怎么搞啊,我设置的1还是不行

COOKIE_TYPE设置成1然后放着让他跑就行了 我昨天好像是运气好一次就登上了

yrong commented

仔细审题,这样改参数有鸡毛用,老老实实等解封

tresult = {dict} <class 'dict'>: {'code': 99999, 'message': '重试次数达到上限'} 'code' (140346851125936) = {int} 99999 'message' (140346850742768) = {str} '重试次数达到上限' __len__ = {int} 2

COOKIE_TYPE 设置成 1,然后放着让他跑就行了。

仔细审题,这样改参数有鸡毛用,老老实实等解封

tresult = {dict} <class 'dict'>: {'code': 99999, 'message': '重试次数达到上限'} 'code' (140346851125936) = {int} 99999 'message' (140346850742768) = {str} '重试次数达到上限' __len__ = {int} 2

这提示是硬编码在代码里的
https://github.com/testerSunshine/12306/blob/master/myUrllib/httpUtils.py#L126

yrong commented

仔细审题,这样改参数有鸡毛用,老老实实等解封
tresult = {dict} <class 'dict'>: {'code': 99999, 'message': '重试次数达到上限'} 'code' (140346851125936) = {int} 99999 'message' (140346850742768) = {str} '重试次数达到上限' __len__ = {int} 2

这提示是硬编码在代码里的
https://github.com/testerSunshine/12306/blob/master/myUrllib/httpUtils.py#L126

302就是封ip,再折腾也没用,换ip或等解封是正途

大喜! 最后再参照testerSunshine的文档说明,自己解决了!!!谢谢 SunShine 大侠!!! 登录成功, 成功订到单程票了!!!!###

修改如下,就OK!!!

COOKIE_TYPE = 2

如果COOKIE_TYPE=2,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html

chromedriver配置版本只要和chrome的大版本匹配就行

CHROME_PATH = "/Program Files (x86)/Google/Chrome/Application/chrome.exe"

自己在跑脚本的ip上手动登陆下12306, 获取个验证码, 就不会有302的问题了, 用cookie_type=1模式

wjbd commented

大喜! 最后再参照testerSunshine的文档说明,自己解决了!!!谢谢 SunShine 大侠!!! 登录成功, 成功订到单程票了!!!!###

修改如下,就OK!!!

COOKIE_TYPE = 2

如果COOKIE_TYPE=2,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html

chromedriver配置版本只要和chrome的大版本匹配就行

CHROME_PATH = "/Program Files (x86)/Google/Chrome/Application/chrome.exe"

在Centos里配置了ChormeDriver地址,但是使用Docker运行的时候找不到这个文件

开启cdn查询
本次待筛选cdn总数为1857, 筛选时间大约为5-10min
广州-深圳 车次坐席查询为空,查询url: https://kyfw.12306.cn/otn/leftTicket/queryA?leftTicketDTO.train_date=2019-10-22&leftTicketDTO.from_station=GZQ&leftTicketDTO.to_station=SZQ&purpose_codes=ADULT, 可以手动查询是否有票
正在第1次查询 随机停留时长:4.2 乘车日期: 2019-10-22 车次:G6205 下单无票 无候补机会 耗时:72.578ms
### **********运行遇到这问题,一直无法下单, 是有票的!!!求救处理方法

大喜! 最后再参照testerSunshine的文档说明,自己解决了!!!谢谢 SunShine 大侠!!! 登录成功, 成功订到单程票了!!!!###

修改如下,就OK!!!
COOKIE_TYPE = 2

如果COOKIE_TYPE=2,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html

chromedriver配置版本只要和chrome的大版本匹配就行

CHROME_PATH = "/Program Files (x86)/Google/Chrome/Application/chrome.exe"

在Centos里配置了ChormeDriver地址,但是使用Docker运行的时候找不到这个文件

请问哥们,你解决了吗,我现在也是这个问题啊

40,77
验证码通过,开始登录..
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
需要验证码
下载验证码...
下载验证码成功
Corrupt JPEG data: 16 extraneous bytes before marker 0xd9
无需加载模型model.v2.0.h5
题目为['安全帽']
1 狮子
2 珊瑚
3 鞭炮
4 沙拉
5 安全帽
6 沙拉
7 手掌印
8 沙拉
验证码识别坐标为40,149
40,149
验证码通过,开始登录..
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302

40,77
验证码通过,开始登录..
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
需要验证码
下载验证码...
下载验证码成功
Corrupt JPEG data: 16 extraneous bytes before marker 0xd9
无需加载模型model.v2.0.h5
题目为['安全帽']
1 狮子
2 珊瑚
3 鞭炮
4 沙拉
5 安全帽
6 沙拉
7 手掌印
8 沙拉
验证码识别坐标为40,149
40,149
验证码通过,开始登录..
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
url: /passport/web/login返回参数为空, 接口状态码: 302
这是啥问题

我也遇到这个问题,可以下载验证码且验证成功,登录的时候失败有时候多次重试就登录成功了,是不是登录接口也需要动态匹配?等大佬解决!

不要瞎bb啊,这个和那个chromedriver 有个毛关系啊,这是登录问题吧

有没有人对于“url: /passport/web/login返回参数为空, 接口状态码: 302”这个问题给个解决思路啊?为啥需要重读登录多次才能成功呢?这样很容易被封号的好不好

我也遇到这么问题了,怎么解决啊

,如果Mac电脑运行,需要调整一下代码就不会出现302的问题,直接原因是cookie的问题

我的时这个报错,不知道怎么搞啊
url: /passport/web/login返回参数为空, 接口状态码: 302 url: /passport/web/login返回参数为空, 接口状态码: 302 url: /passport/web/login返回参数为空, 接口状态码: 302 需要验证码 下载验证码... 下载验证码成功 您已设置使用云打码,但是服务器资源有限,请尽快改为本地打码 验证码识别坐标为184,77 184,77 验证码通过,开始登录.. url: /passport/web/login返回参数为空, 接口状态码: 302 Traceback (most recent call last): File "run.py", line 22, in <module> select_ticket_info.select().main() File "/usr/src/app/init/select_ticket_info.py", line 123, in main self.call_login() File "/usr/src/app/init/select_ticket_info.py", line 117, in call_login self.login.go_login() File "/usr/src/app/init/login.py", line 129, in go_login uamtk = self.baseLogin(user, passwd) File "/usr/src/app/init/login.py", line 66, in baseLogin tresult = self.session.httpClint.send(logurl, loginData) File "/usr/src/app/myUrllib/httpUtils.py", line 185, in send response.content.decode() if isinstance(response.content, bytes) else response.content) File "/usr/local/lib/python3.7/json/__init__.py", line 348, in loads return _default_decoder.decode(s) File "/usr/local/lib/python3.7/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/local/lib/python3.7/json/decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) (ticket) ubuntu@VM-0-7-ubuntu:~/buy_ticket/12306$

,如果Mac电脑运行,需要调整一下代码就不会出现302的问题,直接原因是cookie的问题

怎么调整啊,大佬指点迷津啊

大喜! 最后再参照testerSunshine的文档说明,自己解决了!!!谢谢 SunShine 大侠!!! 登录成功, 成功订到单程票了!!!!###

修改如下,就OK!!!

COOKIE_TYPE = 2

如果COOKIE_TYPE=2,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html

chromedriver配置版本只要和chrome的大版本匹配就行

CHROME_PATH = "/Program Files (x86)/Google/Chrome/Application/chrome.exe"

试了下这个方式可以, 设置模式为1,路径CHROME_PATH = "F:\\chromedriver.exe"

确实是获取cookie的问题,用模式1

同一账号同时一定只能有一个地方登陆,手机app上的账号一定要退出,不然大概率302。我也是模式1,一直302,退出手机app账号再用软件登陆就OK了。

手机app上的账号一定要退出

MacOS:
120 COOKIE_TYPE = 1
121 # 如果COOKIE_TYPE=1,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html
122 # chromedriver配置版本只要和chrome的大版本匹配就行
123 #CHROME_PATH = "/usr/src/app/chromedriver"
124 CHROME_PATH = "/Users/zwx/chromedriver"
125 # 为了docker37 准备的环境变量,windows环境可以不用管这个参数
126 #CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome"
127 CHROME_CHROME_PATH = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"

将chromedriver放到指定的目录下

我也遇到了一样的问题,解决方法是在本地登录然后设置了

按照文档中的

# 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium
COOKIE_TYPE = 3

自己设置了之后就可以了。

应该是登陆信息过期了吧,更新一下RAIL_EXPIRATION、RAIL_DEVICEID

有必要修改一下刷票的频率,以免被封IP。或者在出票时间附近再提高刷票的频率。

所以这个问题答案到底是什么,没看明白

按照楼上说的,退出了手机端app大概率是可以的.

按照楼上说的,退出了手机端app大概率是可以的.

我是那个小概率,哈哈

IP被封。12306网站禁止你那个IP登陆网站了,你试试,你电脑现在登陆不上12306网站了。 在2019年12月29日 11:32,szychou 写道: 所以这个问题答案到底是什么,没看明白 —You are receiving this because you commented.Reply to this email directly, view it on GitHub, or unsubscribe. [ { "@context": "http://schema.org", "@type": "EmailMessage", "potentialAction": { "@type": "ViewAction", "target": "#320?email_source=notifications\u0026email_token=AHH6WMNQ5NLZY6FFIYZSZP3Q3AK5XA5CNFSM4IUPCATKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEHYW6TI#issuecomment-569470797", "url": "#320?email_source=notifications\u0026email_token=AHH6WMNQ5NLZY6FFIYZSZP3Q3AK5XA5CNFSM4IUPCATKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEHYW6TI#issuecomment-569470797", "name": "View Issue" }, "description": "View this Issue on GitHub", "publisher": { "@type": "Organization", "name": "GitHub", "url": "https://github.com" } } ]

你只能等12306给你解封

IP被封。最简单的方法,用你的手机开热点给电脑连接上,你的IP就变了。亲测成功登陆。

我重新抓了一下cookies,发现 TicketConfig.py 中的 ‘RAIL_DEVICEID’ 与 ‘RAIL_EXPIRATION’ 发生了变化,更新了这两个参数,成功登录运行,问题解决

同一账号同时一定只能有一个地方登陆,手机app上的账号一定要退出,不然大概率302。我也是模式1,一直302,退出手机app账号再用软件登陆就OK了。

有效

亲测有效。重新设置RAIL_DEVICEID和RAIL_EXPIRATION的值,就可以登录成功了!

开启cdn查询
本次待筛选cdn总数为1857, 筛选时间大约为5-10min
广州-深圳 车次坐席查询为空,查询url: https://kyfw.12306.cn/otn/leftTicket/queryA?leftTicketDTO.train_date=2019-10-22&leftTicketDTO.from_station=GZQ&leftTicketDTO.to_station=SZQ&purpose_codes=ADULT, 可以手动查询是否有票
正在第1次查询 随机停留时长:4.2 乘车日期: 2020-1-9 车次:GXXXX 下单无票 无候补机会 耗时:72.578ms

**********运行遇到这问题,一直无法下单, 是有票的!!!是有票的!!!是有票的!!!求救处理方法

eyea commented

重新登录下12306,更新下cookie 同步到配置文件,亲测可
2020.1.1

centos 下启动遇到这个问题,说一下我的解决思路吧:
默认情况下,COOKIE_TYPE = 3 ,如果是图形化界面安装的,则需要配置对应的RAIL_DEVICEID和RAIL_EXPIRATION,参考楼上的解决方案;
COOKIE_TYPE = 2,配置文件里面也说了接口不稳定,我尝试是无效过的;
重点来了,设置 COOKIE_TYPE = 1,且服务器上安装centos版Chrome,下载 Chromedrive存在至指定目录:/usr/src/app/chromedriver 重启服务,问题解决。

这个是我测试图片

windows 下我没有试过,但安装好Chromedrive后,应该也是可以设置为:COOKIE_TYPE=1

xcy96 commented

把type设置成3,然后自己在网页上登录12306,F12查看cookie的RAIL_EXPIRATION和
RAIL_DEVICEID,写到TickerConfig里面。我试过了,立马ok

应该是登陆信息过期了吧,更新一下RAIL_EXPIRATION、RAIL_DEVICEID

非常正确,absolutly right .我尝试了,更新了以后,OK了,cookie type用的3

  1. 设置COOKIE_TYPE = 3
  2. 修改:RAIL_EXPIRATIONRAIL_DEVICEID参数值
    注意:一般问题出现是因为没有复制完整的RAIL_DEVICEID内容,具体方法:在Chrome中登录到 12306官网,在官网页面右击,点击检查,在Application中找到Cookies,复制相应的内容。

我重新加载运行了下cdn 就可以正常运行了,哪有说的那么复杂.

@lvfengyi 请教怎么重新运行CDN,我现在每次也是“把type设置成3,然后自己在网页上登录12306,F12查看cookie的RAIL_EXPIRATION和
RAIL_DEVICEID,写到TickerConfig里面”。

MayyS commented

大喜! 最后再参照testerSunshine的文档说明,自己解决了!!!谢谢 SunShine 大侠!!! 登录成功, 成功订到单程票了!!!!###

修改如下,就OK!!!
COOKIE_TYPE = 2

如果COOKIE_TYPE=2,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html

chromedriver配置版本只要和chrome的大版本匹配就行

CHROME_PATH = "/Program Files (x86)/Google/Chrome/Application/chrome.exe"

在Centos里配置了ChormeDriver地址,但是使用Docker运行的时候找不到这个文件

请问哥们,你解决了吗,我现在也是这个问题啊
可行!!!!

url: /passport/web/login返回参数为空, 接口状态码: 302 怎么搞啊啊