如何用python写一个简单的12306抢票软件

Python024

如何用python写一个简单的12306抢票软件,第1张

#coding=utf-8

from selenium import webdriver

from time import sleep

import traceback

TICKET_URI = 'https://kyfw.12306.cn/otn/leftTicket/init'

LOGIN_URI = 'https://kyfw.12306.cn/otn/login/init'

MY_URI = 'https://kyfw.12306.cn/otn/index/initMy12306'

LOGIN = u'登录'

from splinter.browser import Browser

from time import sleep

import traceback

TICKET_URI = 'https://kyfw.12306.cn/otn/leftTicket/init'

LOGIN_URI = 'https://kyfw.12306.cn/otn/login/init'

MY_URI = 'https://kyfw.12306.cn/otn/index/initMy12306'

LOGIN = 'login_user'

def login():

brw.find_element_by_id(LOGIN).click()

sleep(3)

uname = '[email protected]'

pwd = 'xxxyyyzzz'

brw.find_element_by_id('username').send_keys(uname)

sleep(1)

brw.find_element_by_id('password').send_keys(pwd)

sleep(1)

while True:

if brw.current_url != MY_URI:

sleep(1)

else:

break

def addCookie(cklist):

li = list()

for d in cklist:

if d['name'] == '_jc_save_toStation' or d['name'] == '_jc_save_toDate' or d['name'] == '_jc_save_fromStation':

li.append(d)

return li

def book():

global brw

brw = webdriver.Chrome()

brw.set_window_size(1366, 768)

brw.get(TICKET_URI)

sleep(3)

while brw.find_element_by_id(LOGIN):

login()

if brw.current_url == MY_URI:

break

try:

brw.get(TICKET_URI)

sleep(2)

# set src

brw.find_element_by_id('fromStationText').clear()

brw.find_element_by_id('fromStationText').click()

brw.find_element_by_id('fromStationText').send_keys(u'合肥南')

sleep(3)

# set dst

brw.find_element_by_id('toStationText').clear()

brw.find_element_by_id('toStationText').click()

brw.find_element_by_id('toStationText').send_keys(u'武汉')

sleep(3)

# set left date

print('please click train date')

sleep(5)

cke = brw.get_cookies()

li = addCookie(cke)

for x in li:

brw.add_cookie(x)

brw.refresh()

count = 0

success = False

if not success:

while brw.current_url == TICKET_URI:

brw.find_element_by_id('query_ticket').click()

sleep(2)

print(u'第%d次刷新' % count)

count += 1

brw.find_element_by_partial_link_text('D3057')

except Exception as e:

print(traceback.print_exc())

if __name__ == "__main__":

book()

给你个我之前写的参考

import re

import sys

import cookielib

import urllib

import urllib2

import optparse

import json

import httplib2

#reload(sys)

#sys.setdefaultencoding('utf8')

def Login():

cj = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

urllib2.install_opener(opener)

Url = "https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand"

resp = urllib2.urlopen(Url)

with open("code.png", "wb") as image:

image.write(resp.read())

codeStr = sys.stdin.readline()

codeStr = codeStr[:-1]

ajax_url = "https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn"

dc = {

'randCode' : codeStr,

'rand' : "sjrand"

}

request = urllib2.Request(ajax_url, urllib.urlencode(dc))

request.add_header("Content-Type", "application/x-www-form-urlencodedcharset=utf-8")

request.add_header('X-Requested-With','XMLHttpRequest')

request.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36')

request.add_header('Referer','https://kyfw.12306.cn/otn/login/init')

request.add_header('Accept','*/*')

request.add_header('Accept-Encoding','gzip, deflate')

f = urllib2.urlopen(request)

print(f.read())

LoginUrl = "https://kyfw.12306.cn/otn/login/loginAysnSuggest"

dc = {

'randCode' : codeStr,

'userDTO.password' : "你的密码",

'loginUserDTO.user_name': "你的账号"

}

PS:运行出错的话按照报错稍微调整一下,应该没问题,之前我用来查票的。