python制作自动抢票

阅读: 评论:0

python制作自动抢票

python制作自动抢票

使用说明

程序运行开始,需要输入出发地,目的地,出发时间,乘客信息,车次;乘客信息和车次可以输入多个

刚刚开始学习爬虫,selenium仅仅是解放了双手,运行效率不是很高;

程序运行时会打开chrome浏览器,因为使用的是chrome的浏览器驱动;

相关文档

.html#introduction

代码示例

# encoding: utf-8

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdrivermon.by import By

import time

class Qiangpiao(object):

def __init__(self):

driver_path = "E:"

# 浏览器驱动

self.drive = webdriver.Chrome(executable_path=driver_path)

# 登陆链接

self.login_url = ""

# 登陆后的链接

# 2018-11-29 更新,12306改版了,登陆后跳转的页面地址已变

# self.initmy_url = ""

self.initmy_url = ".html"

# 查询页面

self.search_url = ""

# 乘车人页面

self.passenger_url = ""

def wait_input(self):

"""

主要用于页面审核;

当输入出发地,目的地,乘车时间后,会自动出发查询submit

:return:

"""

self.from_station = input("出发地:")

<_station = input("目的地:")

self.depart_time = input("出发时间:")

self.passengers = input("乘客姓名:").split(",")

def _login(self):

"""

登陆验证,登陆成功后会跳转到 self.initmy_url

:return:

"""

(self.login_url)

WebDriverWait(self.drive, 1000).until(

EC.url_to_be(self.initmy_url)

)

print('登录成功')

def _order_ticket(self):

"""

只实现了在无票的情况下去刷票

最关键的是等待验证 WebDriverWait

:return:

"""

(self.search_url)

WebDriverWait(self.drive, 1000).until(

<_to_be_present_in_element_value((By.ID, "fromStationText"), self.from_station)

)

WebDriverWait(self.drive, 1000).until(

<_to_be_present_in_element_value((By.ID, "toStationText"), _station)

)

WebDriverWait(self.drive, 1000).until(

<_to_be_present_in_element_value((By.ID, "train_date"), self.depart_time)

)

WebDriverWait(self.drive, 10000).until(

EC.element_to_be_clickable((By.ID, "query_ticket"))

)

searchBtn = self.drive.find_element_by_id("query_ticket")

searchBtn.click()

WebDriverWait(self.drive, 1000).until(

EC.presence_of_element_located((By.XPATH, ".//tbody[@id='queryLeftTable']/tr"))

)

# find_elements_by_xpath 返回的是一个列表

# find_element_by_xpath 返回的是一个元素

tr_list = self.drive.find_elements_by_xpath(".//tbody[@id='queryLeftTable']/tr[not(@datatran)]")

for tr in tr_list:

train_num = tr.find_element_by_class_name("number").text

# print(train_num)

if train_num ains:

left_ticket_td = tr.find_element_by_xpath(".//td[4]").text

num = 1

while left_ticket_td == "无":

print("暂时无票,正在刷新")

time.sleep(2)

searchBtn.click()

num += 1

print("抢票%s次" % num)

if left_ticket_td != "无":

print(train_num + "有票")

oderBtn = tr.find_element_by_xpath(".//td[13]/a")

oderBtn.click()

WebDriverWait(self.drive, 1000).until(

EC.url_to_be(self.passenger_url)

)

WebDriverWait(self.drive, 1000).until(

EC.presence_of_element_located((By.XPATH, ".//ul[@id='normal_passenger_id']/li"))

)

passenger_labels = self.drive.find_elements_by_xpath(

".//ul[@id='normal_passenger_id']/li/label")

for passenger_label in passenger_labels:

name =

if name in self.passengers:

passenger_label.click()

submitBtn = self.drive.find_element_by_id("submitOrder_id")

submitBtn.click()

WebDriverWait(self.drive, 1000).until(

EC.presence_of_element_located((By.CLASS_NAME, "dhtmlx_wins_body_outer"))

)

WebDriverWait(self.drive, 1000).until(

EC.presence_of_element_located((By.ID, "qr_submit_id"))

)

qr_submit = self.drive.find_element_by_id("qr_submit_id")

qr_submit.click()

def run(self):

self.wait_input()

self._login()

self._order_ticket()

if __name__ == '__main__':

spider = Qiangpiao()

spider.run()

内容来源于网络如有侵权请私信删除

本文发布于:2024-02-01 21:52:02,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679552339645.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23