[Python爬虫]使用Selenium操作浏览器订购火车票

综合编程 2018-03-07

这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分

[Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium)

[Python爬虫]使用Python爬取静态网页-斗鱼直播

[Python爬虫]使用Python爬取动态网页-豆瓣电影(JSON)

[Python爬虫]使用Selenium操作浏览器订购火车票

上节我们说了如何使用selenium打开网页做些简单操作

这节内容为操作浏览器自动订购12306火车票

开发环境

操作系统 : windows 10

Python版本 :3.6

爬取网页模块:selenium

分析网页工具:xpath

关于Selenium

selenium 是一个Web自动测试的工具,可以用来操作一些浏览器Driver,例如Chrome,Firefox等,也可以使用一些headless的driver,例如Phantomjs

具体请参加官网:

 http://selenium-python.readthedocs.io/

关于xpath

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。

因此,对 XPath 的理解是很多高级 XML 应用的基础。

selenium可以使用xpath的形式来定位网页元素,我们可以通过开发者模式的来获取xpath路径,但是不推荐直接引用

详细 教程 查看如下网站

http://www.aibbt.com/a/18046.html

模块安装

 pip3 install selenium

Chrome Driver 下载

这里我们下载Chrome driver

其他的driver见官网

 http://selenium-python.readthedocs.io/installation.html#drivers

下载完成后可以放到系统环境变量中,如:

  C:WindowsSystem32

https://sites.google.com/a/chromium.org/ chrome driver/downloads

程序原理

代码介绍

1. import相关的模块

import selenium.webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

2. 调用Chrome

driver = selenium.webdriver.Chrome()

3. 定位用户名密码

find_element_by_id表示使用id属性进行查找input标签

username= driver.find_element_by_id('username')
password= driver.find_element_by_id('password')

4. 清除用户名密码输入框内容

username.clear()
password.clear()

5. 自动输入用户名密码

username.send_keys("username")
password.send_keys("password")

6. 判断是否登陆成功

7. 选择出发地,目的地,时间后点击查询

8. 填写需要订购的火车车次

多个车次使用列表形式,冒号后面位表格的ID属性值,不包括ticket_

tickets=['D3094:5l000D309460',' G7 024:51000d702454']

9.获取预定,二等座,无座的xpath

yd_path='//*[@id="ticket_'+path+'"]/td[13]/a'
edz_path='//*[@id="ticket_'+path+'"]/td[4]'
wz_path = '//*[@id="ticket_' + path + '"]/td[11]'

10. 判断是否可订购

该语句表示判断是否可点击,超时时间为10s

以及是否有票

11. 确认选座

执行结果

注意事项:

  1. 打开新的页面请使用selenium wait功能以使页面完全加载
  2. 最后提交的时候可能会需要再次输入用户名密码,输入即可
  3. 本脚本仅用于学习用途
  4. http://www.aibbt.com/a/18046.html

源码位置:

源码请访问我的github主页也可点击阅读全文:

https://github.com/bsbforever/spider/blob/master/selenium_12306.py

您可能感兴趣的

副作用还是Feature? 我们的Python应用需要一个全局变量保存一些公用的值,但是不希望其他人随意往里面添加属性,导致这个对象很乱。于是我们是这样定义的: In : class A:    ...:     __slots__ = ('foo', 'bar')    ...:   In : a = A()   In ...
Python爬虫学习==>第十一章:分析Ajax请求-抓取今日头条信息... 学习目的: 解决AJAX请求的爬虫,网页解析库的学习,MongoDB的简单应用 正式步骤 Step1:流程分析 抓取单页内容:利用requests请求目标站点,得到单个页面的html代码,返回结果; 抓取页面详情内容:解析返回结果,得到详情页的链接,并进一步抓取详情页...
Parsing NMEA 0183 sentences in Python My skipper has recently bought an NMEA wifi gateway, which means that the NMEA messages from the various onboard instruments on his yacht are broad...
Python之禅 1 # 在ipython中导入 2 3 import this 4 5 The Zen of Python, by Tim Peters 6 7 Beautiful is better than ugly. 8 Explicit is better than implicit...
What do you really need to know to be a data scien... Previously I discussed the Super Data Science podcast and credit modeling in terms of the modeling strategy and models used. The discussion also cover...