抢票 爬虫,抢票爬虫程序
Yyds干货库存
2306抢票爬虫
我们直接看效果图:
图片上的信息是抢票成功后的界面。
1.技术路线硒铬驱动器
2.思路分析(1)。模拟浏览器登录抢票界面,手动登录。
(2)登录后,让浏览器跳转到购票界面。
(3)手工输入始发地、目的地、发车日期,勾选以上三项信息输入,找到查询按钮查询车次。
(4)找到我们需要的车次,看看有没有票(显示有或几个票),找到车次的预约按钮,点击。如果没有出现以上两种情况,可以循环查询。
(5)一旦验票,执行预定按钮的点击事件,找到乘客信息,执行点击事件,然后找到提交订单按钮,执行点击事件。
(6)点击提交订单按钮后,会弹出一个确认对话框。找到确认按钮,执行click事件,完成抢票。
(7)之后,完成支付操作。
3.直接进入代码# coding=utf8
从selenium导入web驱动程序
从selenium.webdriver.support.ui导入WebDriverWait
从selenium . web driver . support导入预期条件作为EC #预期条件
由导入者
类强票(对象):
#初始化函数
def __init__(self):
self . log in _ URL= https://kyfw . 12306 . cn/OTN/resources/log in . html
self . initmy _ URL= https://kyfw . 12306 . cn/OTN/view/index . html
self . search _ URL= https://kyfw . 12306 . cn/OTN/left ticket/init? linktypeid=dc
self . passenger _ URL= https://kyfw . 12306 . cn/OTN/confirm passenger/initDc
#驱动chrome浏览器运行
self.driver=webdriver。铬(
executable _ path= D:\ pycharm 2017 \ chrome driver . exe )
定义等待_输入(自身):
Self.from_station=input(起点站:)
self . to _ station=input( Destination:)
#出发时间必须与网上格式严格一致:yyyy-mm-dd
Self.depart _ time=input(出发时间:)
Self.passengers=input(乘客姓名(如果有多名乘客,请用逗号分隔:)。拆分(,)
Self.trains=input(公交车次(如果有多次车次,请用逗号分隔:)。拆分(,)
def _login(self):
self.driver.get(self.login_url)
#秀等待(解释:你和心上人约会,等待的条件是对方来不来,也就是事件会不会发生)
#隐性等待(解释:你以等待时间为条件和心上人约会)
WebDriverWait(self.driver,1000)。直到(EC.url_to_be(self.initmy_url))
打印(登录成功!)
def _order_ticket(自身):
# 1.跳转到余票查询界面。
self . driver . get(self . search _ URL)
# 2.等待出发地点输入是否正确?
WebDriverWait(self.driver,1000)。直到(
EC . text _ to _ be _ present _ in _ element _ value((By。ID, fromStationText )、self.from_station)
)
# 3.等待目的地输入正确。
WebDriverWait(self.driver,1000)。直到(
EC . text _ to _ be _ present _ in _ element _ value((By。ID, toStationText ),self.to_station)
)
# 4.等待出发日期输入是否正确?
WebDriverWait(self.driver,1000)。直到(
EC . text _ to _ be _ present _ in _ element _ value((By。ID,列车日期)、自身.出发时间)
)
# 5.等待查询按钮可用。
WebDriverWait(self.driver,1000)。直到(
EC.element_to_be_clickable((By。ID,查询_票证))
)
# 6.如果您可以单击“查找查询”按钮来执行click事件。
search BTN=self . driver . find _ element _ by _ id( query _ ticket )
searchBtn.click()
# 7.单击查询按钮,等待加载票证信息页面。
WebDriverWait(self.driver,1000)。直到(
EC . presence _ of _ element _ located((By。XPATH,。//tbody[@ id= queryLeftTable ]/tr ))
)
# 8.查找所有没有datatrain属性的tr标签。
tr _ list=self . driver . find _ elements _ by _ XPath(。//tbody[@ id= queryLeftTable ]/tr[not(@ datatran)])
# 9.遍历所有满足条件的tr标签
对于tr_list中的tr:
train _ number=tr . find _ element _ by _ class _ name( number )。文本
如果列车编号在自列车中:
left _ ticket=tr . find _ element _ by _ XPath(。//td [4])。text #查找第四个TD标签下的文本
If _ ticket== yes 或left_ticket.isdigit: #确定输入的车次是否在列表中。
订购按钮=tr。按类名查找元素( BTN 72 )
orderBotton.click()
# 等待是否来到了确认乘客的页面
WebDriverWait(self.driver,1000).直到(欧共体。URL _ to _ be(self。乘客_网址))
# 等待所有乘客信息是否被加载进来了
WebDriverWait(self.driver,1000).直到(
欧共体。element _ located的存在性(.XPATH, .//ul[@ id= normal _ passenger _ id ]/Li ))
# 获取所有乘客信息
乘客标签=自己。司机。通过XPath( .//ul[@ id= normal _ passenger _ id ]/Li/label )
对于乘客标签中的乘客标签:#遍历所有的标签标签
name=passanger _ label.text
如果姓名在自助乘客中:#判断名字是否与之前输入的名字重合
乘客_标签。单击()#执行点击操作
# 获取提交订单的按钮
提交按钮=自我。司机。find _ element _ by _ id(提交订单_ id )
submitBotton.click()
# 显示等待确人订单对话框是否出现
WebDriverWait(self.driver,1000).直到(
欧共体。element _ located的存在性(.CLASS_NAME, dhtmlx_wins_body_outer ))
)
# 显示等待确认按钮是否加载出现,出现后执行点击操作
WebDriverWait(self.driver,1000).直到(
欧共体。element _ located的存在性(.ID, qr_submit_id ))
)
确认BTN=自己。司机。按标识查找元素( QR _ submit _ id )
confirmBtn.click()
确认时Btn:
confirmBtn.click()
确认BTN=自己。司机。按标识查找元素( QR _ submit _ id )
返回
定义运行(自身):
self.wait_input()
自我。_登录()
自我.订单_机票()
if __name__==__main__ :
spider=Qiangpiao()
spider.run()
4、运行效果图就是最上面那一张图片5、配置说明请使用前确保已安装好一个大蟒编译器并完成皮洪的配置窗子下推荐使用皮查姆,并下载铬的铬驱动器驱动,并将铬驱动器配置进大蟒包(如果没配置只要指定路径亦可!)
复制代码按命令行提示操作即可完成抢票
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。