找回密码
 会员注册
查看: 24|回复: 0

Python爬虫实战03:自动化抢票脚本某麦网

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71769
发表于 2024-9-8 18:30:45 | 显示全部楼层 |阅读模式
1.脚本介绍1.1背景介绍在这个数字化时代,演唱会、体育赛事和各种活动的门票销售往往在线上进行。由于热门活动的高需求和门票的有限供应,抢票成为了一场激烈的竞争。许多粉丝和爱好者经常因为手速不够快或网络延迟而错失购票机会。为了提高抢票的成功率,自动化抢票脚本应运而生。以下这个脚本是一个用Python编写的自动化抢票程序,利用Selenium库来模拟用户在网页上的操作。下面是脚本的详细功能和结构介绍:1.2脚本目的:脚本的主要目的是在票务网站上自动购买演唱会或活动门票。它可以在指定的时间自动执行购票流程,从而提高抢票成功的概率。1.3主要功能:登录:自动输入用户名和密码登录票务网站。选择票价和数量:自动选择指定的票价,并增加购买数量。选择购票人:在购票流程中选择预设的购票人信息。提交订单:完成选择后自动提交订单。1.4结构和关键函数:导入库:脚本开始处导入了Selenium相关的库,用于浏览器控制和元素交互。设置参数:定义了抢票的URL、开票时间、用户名等参数。浏览器初始化:创建了一个Chrome浏览器的实例。等待时间设置:设置了一个WebDriverWait实例,用于等待网页元素加载。1.4.1PC端抢票操作:choose函数:用于查找并返回网页元素,如果元素不存在或无法点击,则返回None。login函数:用于执行登录操作。buy函数:包含了抢票的主要步骤,如选择票价、数量、购票人,最后提交订单。test函数:用于测试登录和抢票流程。移动端抢票操作:login_mobile函数:用于移动端的登录操作。buy_mobile函数:包含了移动端抢票的步骤。test_mobile函数:用于测试移动端的登录和抢票流程。1.4.2主函数:main函数:是脚本的入口点,默认执行PC端的抢票流程,但可以通过注释切换到移动端或测试模式。1.5注意事项:安全性:脚本中包含了用户名和密码,应当妥善保管,避免泄露。密码输入:由于密码输入框可能不可见,脚本中注释提到需要手动输入密码。异常处理:脚本包含了基本的异常处理,用于处理元素找不到或点击失败的情况。定时抢票:脚本通过一个无限循环和条件判断来实现定时抢票功能。1.6使用方法:要使用这个脚本,用户需要安装Selenium库和一个对应的WebDriver(如ChromeDriver),并设置好相关参数,如抢票链接、用户名和密码。如未安装Selenium库:pipinstallSelenium-ihttps://pypi.tuna.tsinghua.edu.cn/simple1附注:自动化抢票脚本可能违反了某些网站的服务条款,使用前应确保了解相关法律和规定,不得违反任何法律或规定,本文仅供学习参考!此外,使用此类脚本可能对其他用户不公平,应当谨慎使用!2.代码实现"""基于python和selenium实现的某麦网自动刷新抢票脚本用户要提前添加好个人信息和收货地址"""fromseleniumimportwebdriverfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.common.keysimportKeysfromselenium.webdriver.common.byimportByfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.common.exceptionsimportTimeoutExceptionimporttime#设置抢票链接和开票时间#URL="https://piao.damai.cn/146290.html?spm=a2o6e.search.0.0.7e2b4d157EDtjL"#PC页面URL='http://m.damai.cn/damai/perform/item.html?projectId=146290'#手机页面#HOUR=19MIN=0USERNAME="13112390306"driver=webdriver.Chrome()#设置等待时间wait=WebDriverWait(driver,5)driver.get(URL)"""PC端网页抢票操作"""defchoose(seletor):try:#控件可点击时才选定choice=wait.until(EC.element_to_be_clickable((By.XPATH,seletor)))returnchoiceexceptTimeoutExceptionase:print("Timeout!")returnNoneexceptException:print("Notfound!")returnNonedeflogin():#点击登录login=choose('//*[@id="userLoginInfo"]/span/a[1]')login.click()username=choose('//*[@id="login_email"]')username.send_keys(USERNAME)"""由于密码框控件被设置为不可见先自行输入密码并记住密码方便刷新(也可用cookie实现)"""password=choose('//*[@id="login_pwd_txt"]')try:password.click()password.send_keys("********")exceptException:print(password)print("PasswordCan'tclick")defbuy():#点击价格try:price=Noneplus=Nonebuybtn=Nonesubmit=Nonebooker=Noneselect=Noneconfirm=Nonedriver.get(URL)#选择价格whileNone==price:#这里选的是580票面的,如果选其他票面,修改最后的li[*]即可price=choose('//*[@id="priceList"]/div/ul/li[3]')price.click()#数量加1whileNone==plus:plus=choose('//*[@id="cartList"]/div[1]/ul/li/span[3]/a[2]')plus.click()#立即抢购whileNone==buybtn:buybtn=choose('//*[@id="btnBuyNow"]')driver.execute_script("arguments[0].scrollIntoView();",buybtn)buybtn.click()#选择购票人whileNone==booker:booker=choose('/html/body/div[3]/div[3]/div[2]/div[2]/div/a')driver.execute_script("arguments[0].scrollIntoView();",booker)booker.click()#选择、确定whileNone==select:select=choose('/html/body/div[3]/div[3]/div[12]/div/div[2]/div/div[2]/div/table/tbody/tr/label/td[1]/input')driver.execute_script("arguments[0].scrollIntoView();",select)select.click()whileNone==confirm:confirm=choose('/html/body/div[3]/div[3]/div[12]/div/div[2]/div/p/div/a')driver.execute_script("arguments[0].scrollIntoView();",confirm)confirm.click()#提交订单whileNone==submit:submit=choose('//*[@id="orderConfirmSubmit"]')driver.execute_script("arguments[0].scrollIntoView();",submit)submit.click()exceptException:print("抢票失败,尝试重新抢票")buy()deftest():login()time.sleep(30)print("开始抢票")buy()print("抢票成功")"""移动端抢票操作"""deflogin_mobile():"""点击购买进入登录界面自行输入帐号密码"""#立即购买buybtn=NonewhileNone==buybtn:buybtn=choose('/html/body/div[1]/div[2]/div/div[1]/div[2]/div')driver.execute_script("arguments[0].scrollIntoView();",buybtn)buybtn.click()#默认已经选好时间了,再点击立即购买buy=NonewhileNone==buy:buy=choose('/html/body/div[1]/div[3]/div[2]/div[1]/div')driver.execute_script("arguments[0].scrollIntoView();",buy)buy.click()defbuy_mobile():try:#立即购买buybtn=NonewhileNone==buybtn:buybtn=choose('/html/body/div[1]/div[2]/div/div[1]/div[2]/div')driver.execute_script("arguments[0].scrollIntoView();",buybtn)buybtn.click()#默认已经选好时间了,再点击立即购买buy=NonewhileNone==buy:buy=choose('/html/body/div[1]/div[3]/div[2]/div[1]/div')driver.execute_script("arguments[0].scrollIntoView();",buy)buy.click()#580票面price=NonewhileNone==price:price=choose('//html/body/div[1]/div/div[2]/ul/li[3]')driver.execute_script("arguments[0].scrollIntoView();",price)price.click()#数量+1count=NonewhileNone==count:count=choose('/html/body/div[1]/div/div[3]/ul/li/div/div[3]')driver.execute_script("arguments[0].scrollIntoView();",count)count.click()#选好了select=NonewhileNone==select:select=choose('/html/body/div[1]/div/div[4]/div[3]')driver.execute_script("arguments[0].scrollIntoView();",select)select.click()#购票人booker=NonewhileNone==booker:booker=choose('/html/body/div[1]/div[1]/div[2]/div[1]/div[2]/div/ul/li/div')driver.execute_script("arguments[0].scrollIntoView();",booker)booker.click()#去付款pay=NonewhileNone==pay:pay=choose('/html/body/div[1]/div[2]/div[2]/div[2]/div')driver.execute_script("arguments[0].scrollIntoView();",pay)pay.click()exceptException:print("抢票失败,尝试重新抢票")buy_mobile()deftest_mobile():login_mobile()time.sleep(30)print("开始抢票")buy_mobile()print("抢票成功")defmain():#默认PC网页,手机网页对应修改即可login()#30秒等待用户输入密码后再开始刷time.sleep(30)while1:ifMIN==time.localtime().tm_min:print("开始抢票")buy()print("抢票成功")if__name__=='__main__':#test()test_mobile()#main()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 13:53 , Processed in 0.454038 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表