[Python爬虫]使用Selenium操作浏览器订购火车票
这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分
[Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium)
[Python爬虫]使用Python爬取动态网页-豆瓣电影(JSON)
[Python爬虫]使用Selenium操作浏览器订购火车票
上节我们说了如何使用selenium打开网页做些简单操作
这节内容为操作浏览器自动订购12306火车票
开发环境
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:\Windows\System32
https://sites.google.com/a/chromium.org/chromedriver/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','G7024: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. 确认选座
执行结果
注意事项:
- 打开新的页面请使用selenium wait功能以使页面完全加载
- 最后提交的时候可能会需要再次输入用户名密码,输入即可
- 本脚本仅用于学习用途
- http://www.aibbt.com/a/18046.html
源码位置:
源码请访问我的github主页也可点击阅读全文:
https://github.com/bsbforever/spider/blob/master/selenium_12306.py
[Python爬虫]使用Selenium操作浏览器订购火车票的更多相关文章
- python爬虫:使用Selenium模拟浏览器行为
前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...
- Python 爬虫利器 Selenium 介绍
Python 爬虫利器 Selenium 介绍 转 https://mp.weixin.qq.com/s/YJGjZkUejEos_yJ1ukp5kw 前面几节,我们学习了用 requests 构造页 ...
- Python爬虫之selenium的使用(八)
Python爬虫之selenium的使用 一.简介 二.安装 三.使用 一.简介 Selenium 是自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏 ...
- Python爬虫之selenium高级功能
Python爬虫之selenium高级功能 原文地址 表单操作 元素拖拽 页面切换 弹窗处理 表单操作 表单里面会有文本框.密码框.下拉框.登陆框等. 这些涉及与页面的交互,比如输入.删除.点击等. ...
- Python爬虫之selenium库使用详解
Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...
- 每次用 selenium 操作浏览器都还原了 (比如没有浏览器历史记录)
每次用 selenium 操作浏览器都还原了 (比如没有浏览器历史记录)
- Python爬虫之selenium爬虫,模拟浏览器爬取天猫信息
由于工作需要,需要提取到天猫400个指定商品页面中指定的信息,于是有了这个爬虫.这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了. ...
- python爬虫利器Selenium使用详解
简介: 用pyhon爬取动态页面时普通的urllib2无法实现,例如下面的京东首页,随着滚动条的下拉会加载新的内容,而urllib2就无法抓取这些内容,此时就需要今天的主角selenium. Sele ...
- python爬虫之selenium、phantomJs
图片懒加载技术 什么是图片懒加载技术 图片懒加载是一种网页优化技术.图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时 ...
随机推荐
- char数组中除去某个元素
/* 本程序说明: char数组中除去某个元素(其实就是strcpy源码的变形) */ #include <iostream> #include <cassert> #incl ...
- [Python Study Notes]文件操作
文件操作 对文件操作流程 打开文件,可添加filepath打开某绝对路径下的文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 # The_author = 'liu66' # -* ...
- yii2 源码分析Behavior类分析 (四)
Behavior类是所有事件类的基类,它继承自object类 Behavior类的前面注释描述大概意思: * Behavior类是所有事件类的基类 * * 一个行为可以用来增强现有组件的功能,而不需要 ...
- Jenkins gitlab vue,angular,react 自动化构建【原】
大致思路,(本篇主要讲vue ,当然了 angular react 也是一样配置) ,转发请注明原链接,谢谢 :) 1. 服务器上面配置jenkins (安装配置,不介绍) 2.新建item 自由风格 ...
- Linux 编译安装 php 扩展包 curl
php源码目录:/root/php php编译目录:/usr/local/webserver/php/ curl源码目录:/root/curl 1.curl,主要用于发送http请求,是php的一个扩 ...
- HTML5-svg圆形饼状图进度条实现原理
<svg width="440" height="440" viewbox="0 0 440 440"> <circle ...
- lnmp HTTP ERROR 500
http://www.cnblogs.com/thrillerz/p/4725409.html
- CentOS7上安装Nginx、PHP、MySQL
一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc.openssl-devel.pcre-devel和zlib ...
- 使用MyBatis集成阿里巴巴druid连接池(不使用spring)
在工作中发现mybatis默认的连接池POOLED,运行时间长了会报莫名其妙的连接失败错误.因此采用阿里巴巴的Druid数据源(码云链接 ,中文文档链接). mybatis更多数据源参考博客链接 . ...
- hihoCoder Demo Day dp
题意:有一个机器人被困在一个的迷宫中,机器人的初始位置是,目的地是,并且它的移动方式很奇怪:只能一直向右,直到不能再向右才能把方向变成向下:只能一直向下,直到不能再向下才能把方向变成向右.迷宫中的每个 ...