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