日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

12306登录python_python爬虫 -- 12306登录刷票

發布時間:2023/12/20 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 12306登录python_python爬虫 -- 12306登录刷票 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# -*- coding: utf-8 -*-

from splinter.browser import Browser

from time import sleep

import traceback

# Message: 'phantomjs' executable needs to be in PATH.

# ? ?geckodriver 要自行下載

# ? ?phantomjs 自行下載

# we need:

# sudo mv geckodriver /usr/local/bin/

# 1. 自動識別驗證碼--文字 圖片等

# 2. 選擇: G?D?C? 靠窗?走廊? 二等座?頭等座?

# 3. 12306的驗證碼是一個jpg,如果你是通過url獲取這個圖片,會和登陸界面的不同,由隨機因子產生的.通過截圖方式來解析:

# ? ? ?識別文字: 轉換為圖片中的圖畫,給個位置然后觸發click事件

#初始化信息

# 用戶名,密碼

username = u"username@mail.cn"

passwd = u"yourpassword"

# cookies值: 頁面信息--安全--查看cookies

shenzhen = u"%u6DF1%u5733%2CSZQ" #深圳

wuhan = u"%u6B66%u6C49%2CWHN" #武漢

yueyangdong = u"%u5CB3%u9633%u4E1C%2CYIQ" #岳陽東

#shanghai = u"%u4E0A%u6D77%2CSHH" #上海

#taiyuan = u"%u592A%u539F%2CTYV" # 太原

#hangzhou = u"%u676D%u5DDE%u4E1C%2CHGH" #杭州東

starts = shenzhen

ends = yueyangdong

# 時間格式2018-01-02

dtime = u"2018-02-10"

# 車次,選擇第幾趟,0則從上之下依次點擊

order = 0

###乘客名,如果是自己,則上面有個鏈接是自己的,會跳轉到個人中心,用index[1]

#如果乘客不是自己,則用index[0]

pa = u"張三"

###乘客名

users = [u"張三", u"李四"]

"""網址"""

ticket_url = "https://kyfw.12306.cn/otn/leftTicket/init"

login_url = "https://kyfw.12306.cn/otn/login/init"

initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306"

def login():

#點擊登錄,從購票頁面調到了登錄頁面

b.find_by_text(u"登錄").click()

sleep(3)

#給name為loginUserDTO.user_name附上用戶名

#也可以用Id查找的方法b.find_by_id(‘username‘).fill(username)

b.fill("loginUserDTO.user_name", username)

sleep(1)

#給name為userDTO.password值

b.fill("userDTO.password", passwd)

sleep(1)

# 手動輸入驗證碼, 自動驗證的方式還在研究中: a.獲取圖片驗證碼(截圖方式,應該是不能通過獲取圖片的鏈接地址來獲取圖片?,或者其他方式:cookies/session? b.解析圖片驗證碼(通過位置?還是真正意義的圖像識別?)

# 了解下ocr( tesseract-ocr), pytesseract?CNN卷積神經網絡?

print u"等待驗證碼,自行輸入..."

#檢測頁面是否跳轉(用戶是否輸入了驗證碼并且提交)

while True:

if b.url != initmy_url:

sleep(1)

else:

break

def huoche():

global b

#??? b = Browser(driver_name="firefox", executable_path="/usr/bin/firefox")

b = Browser(driver_name="firefox")

print u"訪問12306..."

b.visit(ticket_url)

#查找帶登錄的字符串,u是避免中文報錯

while b.is_text_present(u"登錄"):

sleep(1)

#如果存在調用登錄方法

login()

if b.url == initmy_url:

break

#當執行完login方法后,登錄成功,繼續向下執行

try:

print u"購票頁面..."

# 跳回購票頁面

b.visit(ticket_url)

# 加載查詢信息

b.cookies.add({"_jc_save_fromStation": starts})

b.cookies.add({"_jc_save_toStation": ends})

b.cookies.add({"_jc_save_fromDate": dtime})

b.reload()

sleep(2)

# 增加過濾條件,,,

b.find_by_text(u"GC-高鐵/城際").click()

count = 0

# 循環點擊預訂

#order=0則從第一班車開始全部一次預訂

if order != 0:

#如果頁面沒有跳轉到,說明沒有搶到票,繼續搶票

while b.url == ticket_url:

#點擊查詢進行刷新

b.find_by_text(u"查詢").click()

count +=1

print u"循環點擊查詢... 第 %s 次" % count

sleep(1)

try:

#點擊預訂的那班車

b.find_by_text(u"預訂")[order - 1].click()

except:

print u"還沒開始預訂"

continue

else:

while b.url == ticket_url:

b.find_by_text(u"查詢").click()

count += 1

print u"循環點擊查詢... 第 %s 次" % count

sleep(1)

try:

#從第一個開始一次預訂

for i in b.find_by_text(u"預訂"):

i.click()

except:

print u"還沒開始預訂"

continue

sleep(1)

print u"開始選擇用戶..."

for user in users:

b.find_by_text(user).last.click()

#for user in self.users:

#?? ?b.find_by_text(user).last.click()

print u"提交訂單..."

sleep(1)

b.find_by_text(u"提交訂單").click()

sleep(0.5)

b.find_by_text(u"確認").click()#此處是腳本,待改善

#若循環結束了,則選擇聯系人

#b.find_by_text(pa)[0].click()

print? u"能做的都做了.....不再對瀏覽器進行任何操作"

except Exception as e:

print(traceback.print_exc())

if __name__ == "__main__":

huoche()

# -*- coding: utf-8 -*-

# 僅可用來爬取數據后來進行測試分析

#import ssl

import urllib2

import time

i=1

while(1):

print "開始捕獲第%s張圖片" % str(i)

#if hasattr(ssl, '_create_unverified_context'):

# ?? ssl._create_default_https_context = ssl._create_unverified_context

#ssl._create_default_https_context = ssl._create_unverified_context

#req = urllib2.Request("https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.03777190844118017")

req = urllib2.Request("https://kyfw.12306.cn/passport/captcha/captcha-image?*")

u = urllib2.urlopen(req)

data = u.read()

print "捕獲中.........."

with open("CodePng20180119-"+str(i)+".jpg", 'wb') as f:

time.sleep(2)

f.write(data)

i += 1

print "捕獲結束!"

# python3中使用 urllib.request 代替urllib2

補充下: 獲取驗證碼,用于今后自動識別的源.

總結

以上是生活随笔為你收集整理的12306登录python_python爬虫 -- 12306登录刷票的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。