Ⅰ 瀏覽器搶票插件是用什麼語言編寫的
js就行,功能想要強大點,用主流的後台語言都可以寫
Ⅱ 本人已基本掌握C++,C#,java。現在要編個校園選課助手或搶票助手類似軟體,還需要學習什麼
如果你要用C++代碼和網頁的閉森交互,可以學習javascript ,它也是一獨立語言。當然你要做選課助手宴首和搶票助手,當然少不了數據晌態數庫管理。可以學SQL語言,如果想更優秀些,可以學習erlang語言。當然後台的管理,少不了linux下C語言和Shell腳步。能知道的暫時這么多。
Ⅲ 例如寫個12306的搶票工具 用什麼語言比較好 C++,C#還是JAva
C#比較給力。
Ⅳ 用JAVA怎麼寫一個秒殺器。求具體代碼
最好不要用java寫秒殺來器源,因為你就算用 httpclient 拿到的也是未經過渲染的html頁面,很多頁面js都沒有載入,你根本不知道渲染之後的頁面長什麼樣子,你最好學學木魚的火車票搶票助手,他用的是 firefox 的插件 scriptish 來寫搶票腳本,其實搶票跟秒殺是一個原理的,我第一個秒的程序就是照著他的程序改的,用這個上手也比較容易,但是要求你對javascript比較熟悉,不過比用java實現靠譜多了
Ⅳ 學了bython真的可以製作搶票軟體嗎
這個真可以的,C++和java能編寫的bython也可以編寫,但是你編寫的軟體能不能搶的過那些買票軟體就需要你的伺服器運營和編寫能力了。以前見過一個叫分鉛坦流搶票的槐旁桐軟體,是一啟汪個大神自己編寫的,有興趣可以自己查查看看。他的AI識別做得很好,目前那些亂七八糟的驗證碼需要AI自動識別。
Ⅵ 搶票代碼原理
1
為什麼會實州旅埋行搶票機制?
其他所謂的搶票,根本原理就是幫你時時刻刻盯著12306而已。無論哪一家的搶票,最終都是要通過.
2
有人知道搶票軟體的原理是什麼嗎?
「購票者提供個人信息,將被上傳至伺服器資料庫。 一旦檢測到余票就迅速鎖定,並通過高速填寫乘車人信息和自動識別驗證碼來搶票
3
12306是搶票原理分析 - 多線程之間實現同步 - evanYang - 的博客...
2020年5月3日程序執行的順序按照代碼的先後順序執行。 一般來說處理器為了提高程序運行效率
4
python自動搶票的原理
python自動搶票的原理_利用Python代碼自動搶火車票的原理以及代碼解析
weixin_39890629
原創
關注
1點贊·1024人閱讀
今年你不妨自己寫一段代碼來搶回家的火車票,是不是很Cool。
准備工具:
12306網站用戶名和密碼
chrome瀏覽器及下載chromedriver
下載Python代碼
代碼用的Python+Splinter開發,Splinter是一個使用Python開發的開源Web應用測試工具,它可以幫你實現自動瀏覽站點和與其進行交互。Splinter執行的時候會自動打開你指定的瀏覽器,訪問指定的URL。然後你所開發的模擬的任何行為,都會自動完成,你只需要鎮胡坐在電腦面前,像看電影一樣看著屏幕上各種動作自動完成然後收集結果即可。
了解原理:
找到相應URL,找到控制項模擬登錄、查詢、訂票操作。關鍵是找到控制項名稱,難點是起始地不是直接輸入的頁面值,冊螞需要在cookie中查出。
12306查詢URL:
12306登錄URL:
我的12306URL:
購票確認URL:
Python代碼打開URL,找到控制項填充值:
找到用戶名密碼控制項名
找到起始地控制項名
確定起始地的值,方法Chrome瀏覽器中的「檢查」功能(按F12),Network--->Cookies中找到:
cookie中起始地的值
拷貝起始地的cookie值,我把幾個常用的城市拷出來,放到了字典中:
查詢車票代碼:
其實,你只需要運行代碼:
當然,還需要手動點一下的還是萬惡的12306驗證碼,搶到票後確認支付就行啦。
搶票進行中
搶票成功!
5
登錄
首頁
學習
實踐
活動
專區
工具
TVP
返回騰訊雲官網
阿黎逸陽
111 篇文章
關注
100行代碼自動買火車票——和你一起探索搶票軟體背後的原理
2021-10-08 15:32:42閱讀 6940
大家有沒有這種感覺,一到國慶、春節這種長假,搶火車票就非常困難?
各大互聯網公司都推出搶票服務,只要加錢給服務費就可以增加搶到票的幾率。
有些火車票代售網點和一些加速買票軟體,說你只要給100元服務費就可以優先幫忙搶到票。
本文和你一起探索搶票軟體背後的原理。
本文目錄
效果展示
代碼詳解
2.1 導入庫
2.2 確定好基本購票信息
2.3 登錄12306
2.4 模擬滑動滑塊
2.5 處理疫情特殊要求
2.6 點擊購票並填寫相關信息
2.7 鎖定車票
一、效果展示
在正式進入代碼講解之前,先來看下本文的實現效果。
如果不是為了演示效果,直接在最後確定階段加一個延時點擊確定,應該不到45秒可以鎖定一張票,只要在30分鍾之內付款即可。
二、代碼詳解
本小節會詳細解鎖搶票軟體是如何模擬登錄網站,進行自動買票的。
為了更清晰地給大家展示,部分代碼沒有寫成函數,直接裸代碼運行,讓需要買票的朋友可以自己應用軟體進行購票。
1 導入庫
首先導入本文需要載入的庫,如果你有些庫還沒有安裝,導致運行代碼時報錯,可以在Anaconda Prompt中用pip方法安裝。
import json
import time
from captcha import *
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import wait
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
#導入庫
復制
2 確定好購票基本信息
導入庫後,在python代碼中填寫你購票的基本信息。
purpose = 'ADULT' #購買成人票,如果是學生票,需調整代碼
names = ['謝朝陽'] #填寫購票人姓名
date = '2021-09-21' #填寫購票日期
start_station = '深圳' #購票出發站
end_station = '長沙南' #購票目的站
password = '11234567xyz' #登錄12306的秘密
username ='xiezhaoyang122700' #登錄12306的賬號
trains = ['G1004', 'G80', 'G6028', 'G6182', 'G6016'] #你想買的班次
#填寫基本信息
復制
本文預訂的是2021年9月21日從深圳到長沙南的高鐵票,你可以根據自己的實際需要進行調整。
由於有些班次的時間過早或過晚,買了也很不方便,所以可以在trains中挑選出你滿意的班次進行購票。
在這里需要提醒大家,我之前在嘗試代碼時碰到的坑,那就是時間中如果有個位數要在前面填0。
比如2021年9月2日,你在填寫購票日期date時要寫成'2021-09-02',否則在運行代碼時日期總是填不進去。
3 登錄12306
確定好購票的基本信息後,就可以應用python模擬登錄12306了,代碼如下:
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
browser = webdriver.Chrome(options=options)
browser.maximize_window()
login_url = 'https://kyfw.12306.cn/otn/resources/login.html'
#ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
browser.get(login_url)
time.sleep(0.5)
wait.WebDriverWait(browser, 5).until(EC.element_to_be_clickable((By.CLASS_NAME,'login-hd-account'))).click()
input_name = browser.find_element_by_id('J-userName')
input_pd = browser.find_element_by_id('J-password')
input_name.send_keys(username)
input_pd.send_keys(password)
login = browser.find_element_by_id('J-login')
login.click()
#登錄12306
復制
整體思路是:
應用python模擬調用google瀏覽器;
輸入12306網址;
等網頁載入完全後點擊賬戶密碼登錄;
找到賬號密碼的id,把賬戶密碼信息填充進去;
找到登錄id,模擬點擊登錄按鈕。
在這一小節中要注意兩個點。一是要在python安裝目錄中放和google版本匹配的chromedriver,供python調用。
二是要學會找填寫賬戶密碼信息的id。
首先,在google瀏覽器中輸入12306登錄網址:https://kyfw.12306.cn/otn/resources/login.html。
接著點擊賬戶密碼登錄,會出現如下界面。
然後點擊紅框中的三個點,找到更多工具,點擊開發者工具,會出現如下界面。
點擊紅框中的箭頭,把滑鼠移動到賬戶框上去,就會出現如下界面:
undefined
右邊變灰的框里就會出現對應的id,點擊賬號框,再把滑鼠移動到右邊變灰的字元上去,點擊右鍵,會出現 element的選項,復制下來即可。
<input type="text" class="input" id="J-userName" placeholder="用戶名/郵箱/手機號" style="height: 44px; line-height: 44px; outline: black 0px;" aria-label="請輸入用戶名/郵箱/手機號" title="請輸入用戶名/郵箱/手機號">
復制
發現了嗎?源代碼input_name中要填寫的browser.find_element_by_id('J-userName')內容,即為id="J-userName"中的信息。
4 模擬滑動滑塊
輸入完用戶名和密碼,點擊立即登錄後,會出現如下滑塊驗證要求。
運行如下代碼即可拖動滑塊進行驗證。
browser.implicitly_wait(5)
print('=====開始處理滑動驗證碼=====')
track = [300, 400, 500]
for i in track:
try:
btn = browser.find_element_by_xpath('//*[@id="nc_1__scale_text"]/span')
ActionChains(browser).drag_and_drop_by_offset(btn,i,0).perform()
except:
time.sleep(2)
#拉動滑塊驗證
復制
其中,browser.implicitly_wait(5)表示隱性等待5秒,track中放的是滑塊拉動的距離。
5 處理疫情特殊要求
完成滑塊驗證要求後,會出現如下疫情特殊要求提示:
用如下代碼點擊確認即可。
browser.implicitly_wait(5)
browser.find_element_by_xpath('/html/body/div[5]/div[2]/div[3]/a').click()
time.sleep(2)
#疫情特殊要求
復制
browser.find_element_by_xpath和id的區別是,在右鍵復制時要 XPath或 full XPath。
6 點擊購票並填寫出發地、目的地、出發時間
接下來是選擇買票,並將出發地、目的地、出發時間等信息填寫進去。
browser.find_element_by_xpath('//*[@id="J-chepiao"]/a').click()
browser.find_element_by_xpath('//*[@id="megamenu-3"]/div[1]/ul/li[1]/a').click()
browser.find_element_by_xpath('//*[@id="qd__id"]').click()
#選擇買票
def input_info():
print('=====開始買票=====')
from_station = browser.find_element_by_xpath('//*[@id="fromStationText"]')
from_station.send_keys(Keys.ENTER)
from_station.send_keys(Keys.CONTROL, 'a')
from_station.send_keys(start_station, Keys.ENTER)
browser.implicitly_wait(5)
to_station = browser.find_element_by_xpath('//*[@id="toStationText"]')
to_station.send_keys(Keys.ENTER)
to_station.send_keys(Keys.CONTROL, 'a')
to_station.send_keys(end_station, Keys.ENTER)
browser.implicitly_wait(5)
start_date = browser.find_element_by_xpath('//*[@id="train_date"]')
start_date.send_keys(Keys.ENTER)
start_date.send_keys(Keys.CONTROL, 'a')
start_date.send_keys(Keys.CONTROL, 'x')
start_date.send_keys(date, Keys.ENTER)
browser.implicitly_wait(5)
wait.WebDriverWait(browser, 3).until(EC.element_to_be_clickable((By.ID,'query_ticket'))).click()
input_info()
input_info()
#將出發地、目的地、出發日期填進去
復制
得到結果如下:
這里需要注意的是我調用了兩遍input_info函數,因為12306可能採取了一些反爬措施,一遍輸入進去後查不出東西,顯示為灰色。
7 鎖定車票
最後是依次查找trains中的車次是否有票,有的話點擊購買鎖定車票。
trList = browser.find_elements_by_xpath(".//tbody[@id='queryLeftTable']/tr[not(@datatran)]")
for tr in trList:
trainNum = tr.find_element_by_class_name("number").text
if trainNum in trains:
leftTicket = tr.find_element_by_xpath(".//td[4]").text
print('leftTicket', leftTicket)
if leftTicket == '有' or leftTicket.isdigit():
orderBtn = tr.find_element_by_class_name("btn72")
orderBtn.click()
browser.implicitly_wait(5)
passengerLabels = browser.find_elements_by_xpath(".//ul[@id='normal_passenger_id']/li/label")
for passengerLabel in passengerLabels:
name = passengerLabel.text
if name in names:
passengerLabel.click()
browser.implicitly_wait(20)
# 獲取提交按鈕
submitBtn = browser.find_element_by_id("submitOrder_id")
submitBtn.click()
browser.implicitly_wait(20)
confirmBtn = browser.find_element_by_id("qr_submit_id")
confirmBtn.click()
time.sleep(2)
browser.implicitly_wait(20)
confirmBtn = browser.find_element_by_id("qr_submit_id")
confirmBtn.click()
break
#依次查找trains中的車次是否有票,有的話點擊購買
復制
所以,如果你有特別心儀的車次,可以在trains中放在最前面,依次填寫覺得還行的車次。
至此,應用python解鎖搶票軟體背後的原理已講解完畢,感興趣的朋友可以自己跟著本文實現一遍。
12306不定期會更新買票界面,所以過一段時間可能之前的代碼就要進行一些調整,需要自己弄清裡面的原理,才可以以不變應萬變。
本文的代碼沒有進行高級的封裝,只為大家能更清楚地了解每一步,能在搶票高峰期買到自己心儀的票。
也寫得很基礎,沒有進一步的調優縮短時效,感興趣的朋友可以自行研究,如有任何疑問可以跟我溝通。
6
搶票軟體原理 - Python實戰案例教學(視頻講解) 12306...
2020年12月7日python有很多方法去實現搶票,其基本原理,就是讓程序自動模擬人去操作12306網站
7
為什麼會實行搶票機制?
其他所謂的搶票,根本原理就是幫你時時刻刻盯著12306而已。無論哪一家的搶票,最終都是要通過.
Ⅶ JAVA怎麼寫一個類似搶票插件的程序
找資料學習winpcap和jpcap的使用方法,用來網卡抓包
Ⅷ 畢業設計是基於java火車搶票軟體開發,思路不清晰,求指點下。
這種東西一般是先去分析12306網站,了解每一步操作的http請求,然後通過java去模擬這些請求就可以了。
但是搶票軟體的關鍵是在於破解其驗證碼系統,如果這個做不到的花,那麼你的東西跟12306沒什麼區別,沒什麼價值。現在12306網站驗證碼變的比較勤,這個難度還是比較大的
多線程似乎也沒什麼用,都阻塞在了驗證碼輸入上,快不了~ 除非破解驗證碼
Ⅸ 12306有多少行代碼
基於Selenium和Chrome瀏覽器實現。
默認搶票類型為普通票,硬座。需求多的話可以在源碼里襲肢改,我寫的注釋挺詳細。
復制粘貼就能使用,2019年8月13日 測試可用。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait,Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time,sys
class robTickets(object):
def __init__(self):
'登錄頁、主頁拍鬧世、搶票頁'
self.login_url="https://kyfw.12306.cn/otn/resources/login.html"
self.initmy_url="https://kyfw.12306.cn/otn/view/index.html"
self.search_url="https://kyfw.12306.cn/otn/leftTicket/init"
self.driver = webdriver.Chrome()
self.hastictket=False
def run(self):
self._login()
self._order_ticket()
def _login(self):
'登錄頁面手動登錄'
self.driver.get(self.login_url)
time.sleep(1)
self.driver.find_element_by_class_name("login-hd-account").click()
username = input("請輸入 用戶名/手機號/郵箱 :")
password = input("請輸入 密碼:")
print("請在瀏覽器中完成驗證碼並確認")
self.driver.find_element_by_id("彎搏J-userName").send_keys(username)
self.driver.find_element_by_id("J-password").send_keys(password)
WebDriverWait(self.driver,1000).until(
EC.url_to_be(self.initmy_url)
)
print("登錄成功!")
self._wait_input()
self._order_ticket()
def _wait_input(self):
self.from_station=input("請輸入出發地:")
self.to_station=input("請輸入目的地:")
self.depart_time=input("出發時間(yyy-mm-dd):")
def _order_ticket(self):
'選票頁面手動選票,自動搶票'
self.driver.get(self.search_url)
self.url = "https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc&fs=%s,BJP&ts=%s,SHH&date=%s&flag=N,N,Y"%(self.from_station,self.to_station,self.depart_time)
self.driver.get(self.url)
self.order_url="https://kyfw.12306.cn/otn/confirmPassenger/initDc"
WebDriverWait(self.driver,60).until(
EC.presence_of_all_elements_located((By.XPATH,"//tbody[@id='queryLeftTable']/tr"))
)
tr_list = self.driver.find_elements_by_xpath("//tbody[@id='queryLeftTable']/tr[not(@datatran)]")
print("共搜索到 "+str(len(tr_list))+" 條結果!")
self.passengers = input("請輸入乘客姓名(多個乘客的話,用英文逗號隔開):").split(",")
self.trains = input("請輸入車次(多個車次,用英文逗號隔開):").split(",")
# 循環檢票
TNT = int(input("搶票監測時間(秒):"))
st = time.time()
i=0
while time.time()-st<TNT:
for tr in tr_list:
train_number = tr.find_element_by_class_name("number").text
if train_number in self.trains:
self.hastictket=True
ticket = tr.find_element_by_xpath(".//td[last()-3]").text
if ticket == "有" or ticket.isdigit():
print(train_number+" "+ticket+" 票")
tr.find_element_by_class_name("btn72").click()
self._money()
if self.hastictket==False:
print("未查詢到相關班次!")
self.driver.quit()
sys.exit()
# 未找到票,刷新界面
self.driver.refresh()
tr_list = self.driver.find_elements_by_xpath("//tbody[@id='queryLeftTable']/tr[not(@datatran)]")
WebDriverWait(self.driver, 60).until(
EC.presence_of_all_elements_located((By.XPATH, "//tbody[@id='queryLeftTable']/tr"))
)
i+=1
print("搶票第 %d 次"%i)
def _money(self):
'支付界面自動下單'
WebDriverWait(self.driver, 60).until(
EC.url_to_be(self.order_url)
)
WebDriverWait(self.driver, 60).until(
EC.presence_of_all_elements_located((By.XPATH, "//ul[@id='normal_passenger_id']//li"))
)
lis = self.driver.find_elements_by_xpath("//ul[@id='normal_passenger_id']//li")
x = 0
for li in lis:
# 遍歷聯系人尋找乘客
if li.find_element_by_xpath("./label").text in self.passengers:
li.find_element_by_xpath("./input[@class='check']").click()
x += 1
WebDriverWait(self.driver, 1000).until(
EC.visibility_of_element_located((By.ID, "seatType_%d" % x))
)
# 此處value為1代表硬座,修改此處可以更改票的類型
selectTag = Select(self.driver.find_element_by_id("seatType_%d" % x))
selectTag.select_by_value("1")
print("正在提交訂單,請等待60s...")
self.driver.find_element_by_id("submitOrder_id").click()
WebDriverWait(self.driver, 20).until(
EC.element_to_be_clickable((By.ID, "qr_submit_id"))
)
# 提交並檢查訂單,此處限時60s
start = time.time()
while time.time() - start < 60:
try:
self.driver.find_element_by_xpath(r"//a[@id='qr_submit_id']").click()
except:
if self.driver.current_url != self.order_url:
print("訂單已完成,請打開12306完成支付!")
time.sleep(1000)
else:
if self.driver.find_element_by_xpath(r"//div[@class='tit']").text == "下單成功。":
print("訂單已完成,請打開12306完成支付!")
self.driver.get("https://kyfw.12306.cn/otn/view/train_order.html")
time.sleep(1000)
else:
time.sleep(0.1)
if __name__=='__main__':
print("本程序默認抓取的是普通票,硬座,想實現更多功能請在源碼里修改")
spider = robTickets()
spider.run()
復制
運行截圖:
python
Selenium
12306
海島奇兵無限鑽石版
精選推薦
廣告
python實現12306自動搶票,並發簡訊郵件通知
1740閱讀·6評論·1點贊
2021年4月26日
想去看演唱卻總是搶不到票?教你用Python製作一個自動搶票腳本
1.4W閱讀·367評論·92點贊
2021年11月24日
利用Python自動搶火車票真的不難,100行代碼即可完成
556閱讀·0評論·0點贊
2022年12月15日
python實現雲伺服器上12306自動化搶票功能
806閱讀·1評論·1點贊
2022年10月2日
python搶票軟體源代碼_一百多行python代碼實現搶票助手
5063閱讀·0評論·0點贊
2021年3月6日
Python實戰之12306搶票
2499閱讀·15評論·6點贊
2022年3月15日
gta5正版下載
精選推薦
廣告
1每天Python小例-12306爬蟲#WinError 2
310閱讀·0評論·0點贊
2021年5月26日
100行Python代碼實現自動搶火車票
246閱讀·0評論·0點贊
2023年1月14日
小年到了,回家搶票太難,用Python做個腳本12306自動查票以及自動購票....
36閱讀·0評論·0點贊
2023年1月14日
Python製作一個12306查票程序腳本(附完整代碼,僅供學習參考)
841閱讀·0評論·3點贊
2021年9月9日
使用Python實現12306自動化搶票
2689閱讀·2評論·1點贊
2021年4月22日
Python實現自動搶票12306(基於Python3.8+splinter)
299閱讀·0評論·0點贊
2021年9月18日
python爬蟲(十七)12306案例
1008閱讀·0評論·1點贊
2021年9月13日
python實現12306全自動搶票
2.0W閱讀·3評論·26點贊
2019年1月2日
12306自動搶票軟體代碼實現
2.0W閱讀·17評論·9點贊
2018年2月3日
網頁小腳本,真簡單 搶手機腳本 搶票腳本 淘寶腳本 不知道能不能行
1.2W閱讀·5評論·1點贊
2019年1月16日
12306火車票搶票Python代碼
2898閱讀·3評論·1點贊
2018年5月10日
[轉]搶票工具代碼
684閱讀·0評論·1點贊
2019年9月26日
python大麥搶票腳本_搶不到票?你離idol只差
Ⅹ 《轉》我要回家!教你如何秒殺12306,JAVA程序搶票成功!
我倒,買火車票都有程序了哇^_^,還要我回家不用坐火車哦對了,你們怕不怕那些人製作的搶票工具會泄露自己的個人信息呢?