python制作自动抢票_python+selenium实现自动抢票

使用说明

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

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

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

相关文档

https://selenium-python.readthedocs.io/installation.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.webdriver.common.by import By

import time

class Qiangpiao(object):

def __init__(self):

driver_path = "E:py_pachongchromedriver.exe"

# 浏览器驱动

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

# 登陆链接

self.login_url = "https://kyfw.12306.cn/otn/login/init"

# 登陆后的链接

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

# self.initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306"

self.initmy_url = "https://kyfw.12306.cn/otn/view/index.html"

# 查询页面

self.search_url = "https://kyfw.12306.cn/otn/leftTicket/init"

# 乘车人页面

self.passenger_url = "https://kyfw.12306.cn/otn/confirmPassenger/initDc"

def wait_input(self):

"""

主要用于页面审核;

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

:return:

"""

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

self.to_station = input("目的地:")

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

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

self.trains = input("车次:").split(",")

def _login(self):

"""

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

:return:

"""

self.drive.get(self.login_url)

WebDriverWait(self.drive, 1000).until(

EC.url_to_be(self.initmy_url)

)

print('登录成功')

def _order_ticket(self):

"""

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

最关键的是等待验证 WebDriverWait

:return:

"""

self.drive.get(self.search_url)

WebDriverWait(self.drive, 1000).until(

EC.text_to_be_present_in_element_value((By.ID, "fromStationText"), self.from_station)

)

WebDriverWait(self.drive, 1000).until(

EC.text_to_be_present_in_element_value((By.ID, "toStationText"), self.to_station)

)

WebDriverWait(self.drive, 1000).until(

EC.text_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 in self.trains:

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 = passenger_label.text

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()

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 实现自动抢票功能需要用到网络爬虫技术,以及对目标网站的数据分析能力。首先,你需要确定你要抢票的网站,然后使用 Python 的第三方库(如 Requests 和 BeautifulSoup)对该网站进行数据爬取,并对爬取到的数据进行分析。接下来,你可以使用 Python自动化测试工具(如 Selenium)来模拟用户的操作,自动完成购票流程。 请注意,这种做法可能不符合网站的使用规则,甚至可能违反法律法规。我不提倡这种做法,并建议您遵守网站的使用规则,合法购买票务。 ### 回答2: 使用Python实现自动抢票可以通过编写一个网络爬虫程序来实现。以下是一个简要的步骤: 1. 安装Python:首先确保计算机上已经安装了Python编程语言,可以选择Python 2.x或Python 3.x。 2. 安装相关库:使用Python的pip命令或其他包管理工具安装所需的库,如requests、BeautifulSoup和Selenium等。 3. 编写爬虫程序:通过编写Python程序来模拟用户登录和购票过程。可以使用requests库发送HTTP请求,并通过BeautifulSoup库解析HTML网页内容。 4. 设置抢票参数:根据需求设置相应的抢票参数,如登录信息、目标票务网站、日期、出发地和目的地等。 5. 登录网站:使用requests库发送登录请求,并将登录所需的用户名和密码等信息作为请求的参数。 6. 搜索车票:使用requests库发送搜索车票的请求,并将所需的参数(如日期、出发地和目的地等)作为请求的参数。 7. 解析网页:使用BeautifulSoup库解析响应的HTML网页内容,提取所需的车票信息。 8. 选择和预订车票:根据需求,在解析的车票信息中选择合适的车票,并发送预订车票的请求。 9. 完成购票过程:根据网页的响应结果判断购票是否成功,并进行相应的处理。 10. 定时执行:可以使用Python的定时任务库(如schedule)来定时执行抢票程序,并设置好抢票的频率和时间。 请注意,为了实现自动抢票,可能需要了解网站的登录和购票机制,并可能需要处理验证码等相关问题。此外,进行网络爬虫时,请遵守相关网站的规定和法律法规,注意不要给网站带来过大的访问压力。 ### 回答3: Python可以使用Selenium库来实现自动抢票Selenium是一个自动化测试工具,可以通过模拟浏览器行为来实现自动操作。 首先,需要安装Selenium库。可以使用pip命令在命令行中输入以下指令进行安装: ``` pip install selenium ``` 接下来,需要下载对应浏览器的驱动。不同浏览器需要下载不同的驱动,Selenium支持常见的浏览器,如Chrome、Firefox等。将驱动放在Python的安装目录下。 然后,可以使用如下代码来实现自动抢票: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys # 创建浏览器实例 driver = webdriver.Chrome() # 使用Chrome浏览器 # driver = webdriver.Firefox() # 使用Firefox浏览器 # 打开购票网站 driver.get("http://www.example.com/ticket") # 执行登录操作 username = driver.find_element_by_id("username") username.send_keys("your_username") password = driver.find_element_by_id("password") password.send_keys("your_password") password.send_keys(Keys.ENTER) # 执行抢票操作 ticket_button = driver.find_element_by_id("ticket_button") ticket_button.click() # 等待抢票结果 result = driver.find_element_by_id("result") print(result.text) # 关闭浏览器 driver.quit() ``` 以上代码示例了一个简单的自动抢票过程:首先打开购票网站,并进行登录操作,然后点击抢票按钮,最后等待抢票结果并打印出来。实际的自动抢票过程要根据具体的网站和需求来编写代码。 需要注意的是,自动抢票属于模拟人的行为,可能会违反网站的规则,导致封号或封IP等风险。在编写自动抢票代码时,应遵守网站的规则并合理控制抢票频率,以避免不必要的麻烦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值