如何使用Python和selenium库自动化查询12306火车票余票并设置QQ邮箱提醒?请提供详细的步骤和代码示例。
时间: 2024-11-01 15:08:20 浏览: 20
要实现使用Python和selenium库自动化查询12306火车票余票并设置QQ邮箱提醒的功能,可以遵循以下步骤进行操作。首先,确保你已经安装了Python环境和必要的库,包括selenium、smtplib和email。接下来,你需要下载并安装Chrome浏览器以及对应的chromedriver。chromedriver的版本需要与你的Chrome浏览器版本相匹配。此外,还要准备QQ邮箱的SMTP设置,包括SMTP服务器地址、端口、登录邮箱及密码,以及可能需要的授权码。
参考资源链接:[Python自动化查询12306余票并邮件通知教程](https://wenku.csdn.net/doc/bhd8bg05xy?spm=1055.2569.3001.10343)
对于12306的自动化操作,你需要根据12306网站的当前HTML结构来定位和操作网页元素。例如,通过网页元素的ID来获取车票信息,这通常需要在脚本中硬编码对应元素的ID,如ZYid(一等座)、ZEid(二等座)和WZid(无座)。
以下是代码示例的核心步骤:
1. 导入selenium库并创建webdriver对象,打开Chrome浏览器。
```python
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('***')
```
2. 在12306网站上填写查询信息,包括出发站、到达站、车次和日期。
```***
***mon.keys import Keys
from_station = driver.find_element_by_id('fromStation')
to_station = driver.find_element_by_id('toStation')
train_date = driver.find_element_by_id('train_date')
train_num = driver.find_element_by_id('trainNum')
# 假设这些元素ID是通过分析12306网站结构获取的
from_station.send_keys('出发站名')
to_station.send_keys('到达站名')
train_date.send_keys('查询日期')
train_num.send_keys('车次号')
```
3. 获取并比较余票信息,如果变化则触发邮件发送。
```python
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待余票信息加载
wait = WebDriverWait(driver, 10)
first_class = wait.until(EC.presence_of_element_located((By.ID, 'ZYid')))
second_class = wait.until(EC.presence_of_element_located((By.ID, 'ZEid')))
no_seats = wait.until(EC.presence_of_element_located((By.ID, 'WZid')))
# 获取余票信息并进行比较的逻辑代码(此处省略,具体实现根据12306网站实际情况编写)
# 如果发现余票有变化,调用邮件发送函数
send_email(from_email, to_email, smtp_server, smtp_port, login, password, subject, message)
```
4. 实现邮件发送函数send_email。
```python
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_email(from_email, to_email, smtp_server, smtp_port, login, password, subject, message):
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(login, password)
message = MIMEText(message, 'plain', 'utf-8')
message['From'] = Header(from_email)
message['To'] = Header(to_email)
message['Subject'] = Header(subject, 'utf-8')
server.sendmail(from_email, [to_email], message.as_string())
server.quit()
```
5. 在操作完成后,关闭浏览器。
```python
driver.quit()
```
通过上述步骤,你可以自动化地监控12306火车票余票信息,并在有票数变化时通过QQ邮箱发送提醒。请注意,实际代码需要根据12306网站的实时HTML结构和你的具体需求进行调整。同时,确保你了解并遵守12306网站的使用规定,避免违规操作。
参考资源链接:[Python自动化查询12306余票并邮件通知教程](https://wenku.csdn.net/doc/bhd8bg05xy?spm=1055.2569.3001.10343)
阅读全文