2018-03-06 Python 宅必备 好久没更新Python相关的内容了,这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分 上节我们说了如何使用selenium打开网页做些简单操作 这节内容为操作浏览器自动订购12306火车票 ##开发环境 操作系统:windows 10 Python版本 :3.6 爬取网页模块:selenium 分析网页工具:xpath ## 关于Selenium selenium 是一个Web自动测试的工具,可以用来操作一些浏览器Driver,例如Chrome,Firefox等,也可以使用一些headless的driver,例如Phantomjs 具体请参加官网: [ http://selenium-python.readthedocs.io/]( http://selenium-python.readthedocs.io/) ## 关于xpath XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。 XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。 因此,对 XPath 的理解是很多高级 XML 应用的基础。 selenium可以使用xpath的形式来定位网页元素,我们可以通过开发者模式的来获取xpath路径,但是不推荐直接引用 [image:81 size:orig] 详细教程查看如下网站 [http://www.w3school.com.cn/xpath/index.asp](http://www.w3school.com.cn/xpath/index.asp) ## 模块安装 ``` pip3 install selenium ``` ## Chrome Driver 下载 这里我们下载Chrome driver [image:82 size:orig] 其他的driver见官网 [http://selenium-python.readthedocs.io/installation.html#drivers](http://selenium-python.readthedocs.io/installation.html#drivers) 下载完成后可以放到系统环境变量中,如: ``` C:\Windows\System32 ``` [image:83 size:orig] [https://sites.google.com/a/chromium.org/chromedriver/downloads](https://sites.google.com/a/chromium.org/chromedriver/downloads) ## 程序原理 [image:84 size:orig] ## 代码介绍 **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. 判断是否登陆成功** [image:85 size:orig] **7. 选择出发地,目的地,时间后点击查询** [image:86 size:orig] **8. 填写需要订购的火车车次** 多个车次使用列表形式,冒号后面位表格的ID属性值,不包括ticket_ ``` tickets=['D3094:5l000D309460','G7024:51000d702454'] ``` [image:87 size:orig] **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 以及是否有票 [image:88 size:orig] **11. 确认选座** [image:89 size:orig] ## 执行结果 [image:90 size:orig] ## 注意事项: - 打开新的页面请使用selenium wait功能以使页面完全加载 - 最后提交的时候可能会需要再次输入用户名密码,输入即可 - 本脚本仅用于学习用途 ## 源码位置: 源码请访问我的github主页 [https://github.com/bsbforever/spider/blob/master/selenium_12306.py](https://github.com/bsbforever/spider/blob/master/selenium_12306.py)