Ⅰ 浏览器抢票插件是用什么语言编写的
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程序抢票成功!
我倒,买火车票都有程序了哇^_^,还要我回家不用坐火车哦对了,你们怕不怕那些人制作的抢票工具会泄露自己的个人信息呢?