Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能

yizhihongxing

首先我们来讲一下 Python + selenium + requests 实现 12306 全自动抢票的攻略。

什么是 Python + selenium + requests

  • Python:一种高级编程语言,常用于数据处理、网络爬虫等领域。
  • selenium:一个用于自动化测试的工具,可以模拟浏览器的行为操作网页,实现自动化进行网页操作的功能。
  • requests:Python 的一个HTTP请求库,可以方便地对HTTP请求进行处理和管理。

综合使用 Python + selenium + requests,可以实现对网页进行自动化测试和抓取数据的功能。

实现 12306 全自动抢票

1. 登录 12306

要实现全自动抢票,首先需要登录 12306 网站。以下是登录的代码:

from selenium import webdriver

# 配置浏览器
options = webdriver.ChromeOptions()
options.add_argument('disable-infobars')    # 禁止显示“Chrome正在受到自动软件的控制”
browser = webdriver.Chrome(chrome_options=options)

# 打开 12306 登录网页
browser.get('https://kyfw.12306.cn/otn/login/init')

# 自动输入用户名密码
input_username = browser.find_element_by_id('username')
input_password = browser.find_element_by_id('password')
input_username.send_keys('your username')
input_password.send_keys('your password')

# 自动输入验证码(需要配合其他方法实现验证码自动识别)
input_code = browser.find_element_by_id('J-loginImg')
code = input('请输入验证码:')
input_code.send_keys(code)

# 点击登录按钮
login_button = browser.find_element_by_id('loginSub')
login_button.click()

# 等待登录成功
login_result = browser.find_element_by_id('my12306')

# 登录成功,打印结果
print('登录成功!')

2. 查询车票

查询车票需要使用 requests 库进行发送请求和获取响应,再使用 selenium 对结果进行自动化操作。以下是查询车票的代码:

import requests

# 查询车票的 URL
url = 'https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc'
# 查询车票需要的 cookie
cookie = '_uab_collina=150049314383597715626703; password=your_password_md5; JSESSIONID=your_jsessionid; BIGipServerotn=1061773066.24610.0000; cityCode=whn'
# 查询车票需要的查询条件
params = {
    'leftTicketDTO.train_date': '2021-07-22',
    'leftTicketDTO.from_station': 'WHN',
    'leftTicketDTO.to_station': 'BJP',
    'purpose_codes': 'ADULT'
}

# 发送查询车票的请求
response = requests.get(url, params=params, headers={'Cookie': cookie})
# 获取查询结果,使用 selenium 进行自动化操作
browser.get('https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc')
browser.add_cookie({'name': 'BIGipServerotn', 'value': '1061773066.24610.0000'})
browser.get('https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc')
browser.refresh()
ticket = browser.find_element_by_xpath('//*[@id="ZE_24000G813203"]')
ticket.click()

# 选择乘客和座位
submit_button = browser.find_element_by_id('submitOrder_id')
submit_button.click()

为了方便理解,我仅提取了部分代码,完整的代码可以参考这个GitHub项目。此外,由于 12306 网站会实时更新 DOM 结构,所以需要对代码进行不断的调整和优化。

示例说明

对于验证码的自动识别,可以使用 Python 的第三方库 Pillow 和 Tesseract-OCR。代码示例如下:

from PIL import Image
import pytesseract

# 获取验证码图片
code_element = browser.find_element_by_id('J-loginImg')
code_element.screenshot('code.png')
code_img = Image.open('code.png')

# 对验证码进行处理,提高识别率
code_img = code_img.convert('L')
code_img = code_img.point(lambda x: 255 if x > 140 else 0)
code_img.show()

# 使用 Tesseract 进行验证码识别
code_text = pytesseract.image_to_string(code_img)

需要注意的是,在使用 Tesseract 进行验证码识别之前,需要先安装 Tesseract-OCR 并配置环境变量。

另外,如果想要实现与本人登陆 12306 站点抢票的话,需要准备一个测试账号,或者使用自己的账号进行相关测试,以免影响他人正常购票。

以上就是 Python + selenium + requests 实现 12306 全自动抢票及验证码破解加自动点击功能的完整攻略,如果还有不清楚的地方,欢迎留言提问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 【验证码逆向专栏】数美验证码全家桶逆向分析以及 AST 获取动态参数

    声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】联系作者立即删除! 目标 目标:数美全…

    python 2023年5月8日
    00
  • python实现excel读写数据

    下面是Python实现Excel读写数据的完整攻略: 1. 准备工作 在使用Python读写Excel文件前,需要先安装两个必要的库:openpyxl和xlrd。如果你需要写Excel文件,还需要安装另一个库xlwt。 安装方法如下,打开命令行界面(Windows用户可以使用PowerShell): # 安装openpyxl pip install open…

    python 2023年6月3日
    00
  • Python + Tkinter连接本地MySQL数据库简单实现注册登录

    Python + Tkinter 连接本地 MySQL 数据库简单实现注册登录的步骤如下: 1.安装必要的软件在本地计算机上安装 MySQL 数据库,并安装 Python 包管理器 pip。 2.使用pip安装需要的包打开终端或命令行窗口,使用 pip 安装以下必要的 Python 包: mysql-connector-python:用于连接 MySQL 数…

    python 2023年6月13日
    00
  • Python ArcPy批量计算多时相遥感影像的各项元平均值

      本文介绍基于Python中ArcPy模块,对大量长时间序列栅格遥感影像文件的每一个像元进行多时序平均值的求取。   在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取——这一操作很好实现,基于ArcMap软件或者简单的Python代码就可以实现;但有时候,我们会需要结合同一地区、不同时相的多景遥感影像,求取每一个像元在全部时相中…

    python 2023年4月19日
    00
  • python实现备份目录的方法

    让我来详细讲解“Python实现备份目录的方法”的完整攻略。该攻略主要包括以下内容: 确定备份目录 备份目录的复制方法 备份目录的归档和压缩 下面对每个内容进行详细说明: 1. 确定备份目录 首先,你需要确定要备份的目标目录。可以使用os模块中的os.listdir()函数列出目录下的所有文件和目录。 import os backup_dir = &quot…

    python 2023年6月3日
    00
  • python实现小程序推送页面收录脚本

    下面我将详细讲解“python实现小程序推送页面收录脚本”的完整攻略。 什么是小程序推送页面收录? 小程序推送页面收录是指通过向小程序平台推送网页地址,使得小程序可以对该网页进行收录。这样当用户搜索并打开与该网页相关的小程序时,该网页会自动展示在小程序中,提供给用户访问。 如何实现小程序推送页面收录? 在小程序平台上申请开通页面收录功能。具体操作如下: 登录…

    python 2023年5月23日
    00
  • python实现字符串和日期相互转换的方法

    转换字符串和日期是Python开发中常见的任务。Python提供了多种函数和模块来转换字符串和日期。下面是Python实现字符串和日期相互转换的方法的完整攻略: 1. 将字符串转换为日期 使用datetime模块进行转换 在Python中可以使用datetime模块将字符串转换为日期。datetime.strptime函数可以将指定格式的字符串转换为日期类型…

    python 2023年6月2日
    00
  • 详解Python的循环结构知识点

    详解Python的循环结构知识点 本文将为大家详细讲解Python中的循环结构,包括for循环和while循环两种常见的循环语句。 for循环 for循环是Python中最常用的循环语句之一。它能够遍历任何序列的元素,例如字符串、列表、元组等等。for循环语法如下: for 变量 in 序列: 执行代码块 其中,变量表示用于迭代的当前元素,序列则是需要遍历的…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部