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

首先我们来讲一下 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日

相关文章

  • Python 使用 pip 安装 matplotlib 模块的方法

    下面是使用pip安装matplotlib模块的攻略: 步骤一:查看当前是否已经安装pip 使用如下命令来查看当前是否已经安装pip: pip –version 如果已经安装,会显示pip的版本信息,如:pip 21.0.1。如果没有安装,则需要先安装pip,具体安装过程可以参照官方文档:https://pip.pypa.io/en/stable/insta…

    python 2023年5月14日
    00
  • python实现创建新列表和新字典,并使元素及键值对全部变成小写

    创建新列表和新字典并把其中的元素和键值对都变为小写可以分别使用以下两种方法实现: 1.创建新列表并把其中的元素都变为小写: 首先,需要定义一个原始列表original_list,然后使用列表推导式创建一个新列表new_list。在列表推导式中,对于原始列表中的每一个元素,我们都使用字符串的lower()方法把它转换为小写形式。 original_list =…

    python 2023年5月13日
    00
  • python删除文件示例分享

    下面是详细的python删除文件示例分享攻略。 概述 在开发的时候,有时候需要删除一些无用的文件,本文将分享python删除文件的几种方法,适用于不同场景。 方法一:使用os模块的remove()函数 os模块是python文件和目录处理的核心模块,其中包含了删除文件的函数remove()。其使用方法如下: import os os.remove(&quot…

    python 2023年6月2日
    00
  • 如何在Windows上安装Numpy

    下面是如何在Windows上安装Numpy的完整攻略: 确认Python已经安装 在安装Numpy之前,需要确认Python已经成功安装在你的Windows系统上。如果你还没有安装Python,可以去官网下载并安装最新版本的Python。 可以在命令行中输入以下命令来检查Python是否安装成功: python –version 如果看到Python的版本…

    python-answer 2023年3月25日
    00
  • Python中文件的读取和写入操作

    下面是关于Python中文件读取和写入操作的完整攻略。 文件读取操作 Python中文件读取操作需要使用open()函数来打开文件,并且可以通过不同模式的文件打开方式来读取文件的内容。 打开文件 打开文件可以通过open()函数来实现。代码示例如下: file = open(‘filename.txt’, ‘r’) 其中,’filename.txt’是文件路…

    python 2023年6月3日
    00
  • python 爬取影视网站下载链接

    关于“python 爬取影视网站下载链接”的完整攻略,我为你提供如下的步骤: 1. 确认目标网站和内容 首先,需要明确你要爬取的是哪个影视网站、以及你要下载哪些类型的视频内容。为了方便说明,我们以某个模拟网站为例,该网站中有多个视频栏目,其中每个栏目都有多个视频、每个视频都有多个下载链接。 2. 分析页面结构 我们要使用 Python 爬虫,就需要先找到目标…

    python 2023年6月2日
    00
  • Python 十个字典用法使用技巧归纳

    Python十个字典用法使用技巧归纳 1. 字典的创建和赋值 创建相对容易,可以通过{}或dict()实现。用=赋值,或用update()进行多个键值对的赋值。 示例: # 用花括号创建字典 dict1 = {‘name’: ‘Lucy’, ‘age’: 18} # 用dict()创建字典 dict2 = dict([(1, ‘one’), (2, ‘two…

    python 2023年6月5日
    00
  • Python安装图文教程 Pycharm安装教程

    下面是Python安装和Pycharm安装的详细教程: Python安装教程 1. 下载Python安装包 访问Python官网 http://www.python.org/downloads/ ,选择适合你操作系统的Python安装包下载。一般来说,你应该下载最新的稳定版Python 3.x 版本。 2. 安装Python 双击下载的Python安装包,按…

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