python爬虫积累(一)--------selenium+python+PhantomJS的使用(转)
阅读目录
正文
最近按公司要求,爬取相关网站时,发现没有找到js包的地址,我就采用selenium来爬取信息,相关实战链接:python爬虫实战(一)--------中国作物种质信息网
一、Selenium介绍
Selenium 是什么?一句话,自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试。换句话说叫 Selenium 支持这些浏览器驱动。Selenium支持多种语言开发,比如 Java,C,Ruby等等,有 Python 吗?那是必须的!安装只要cmd中 pip install selenium 即可。
二、爬虫为什么要用selenium?
对于一般网站来说scrapy、requests、beautifulsoup等都可以爬取,但是有些信息需要执行js才能显现,而且你肉眼所能看到的基本都能爬取下来,在学习中遇到了,就记录下来方便以后查看。
webdrive是selenium中一个函数:
1 from selenium import webdriver
2 driver = webdriver.PhantomJS()
3 driver.get('网址')
其中PhantomJS同时可以换成Chrome、Firefox、Ie等等,但是PhantomJS是一个无头的浏览器,运行是不会跳出相应的浏览器,运行相对效率较高。在调试中可以先换成Chrome,方便调试,最后再换成PhantomJS即可。
三、PhantomJS介绍
PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。PhantomJS的用处可谓非常广泛,诸如前端无界面自动化测试(需要结合Jasmin)、网络监测、网页截屏等。
PhantomJS官方地址:http://phantomjs.org/。
PhantomJS官方API:http://phantomjs.org/api/。
PhantomJS官方示例:http://phantomjs.org/examples/。
PhantomJS GitHub:https://github.com/ariya/phantomjs/。
四、PhantomJS安装
本人windowns7系统,把下载下来的phantomjs.exe移到你所用python文件夹下的Script中就可以使用了。(下载PhantomJS-2.1.1-windowns.zip链接:http://pan.baidu.com/s/1c8HeBc 密码:2zm4)
小测试:

1 from selenium import webdriver
2 driver = webdriver.PhantomJS()
3 driver.get("http://hotel.qunar.com/")
4 data = driver.title
5 print data
6
7 #输出
8 【去哪儿酒店】酒店预订, 酒店查询-去哪儿网Qunar.com

五、操作实战

1 # -*-coding:utf-8-*-
2 from selenium import webdriver
3 import time
4 import win32api
5 import re
6 import win32con
7 browser = webdriver.PhantomJS()
8 '''PhantomJS的屏幕截图是滚动底部的,而Chrome没有'''
9
10 browser.get("http://flight.qunar.com/") #打开去哪儿官网
11 a=browser.get_screenshot_as_file("E:/Python27/test2.jpg") #屏幕截图
12
13 browser.find_element_by_id("searchTypeRnd").click() #点击往返
14 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[1]/div/input').clear() #先清理下输入框,默认是有地方的
15 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[1]/div/input').send_keys(u"北京") #输入起点位置
16
17 '''这里涉及到win32api可以参考相关手册----以下是键盘操作'''
18 time.sleep(0.5)
19 win32api.keybd_event(108,0,0,0) #按enter键
20 #按某个键 win32api.keybd_event(键位码,0,0,0)
21 win32api.keybd_event(108,0,win32con.KEYEVENTF_KEYUP,0)#释放按键
22 #释放按键 win32api.keybd_event(键位码,0,win32con.KEYEVENTF_KEYUP,0)
23
24 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[2]/div/input').clear()
25 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[2]/div/input').send_keys(u"上海") #输入终点位置
26 time.sleep(0.5)
27 win32api.keybd_event(108,0,0,0) #按enter键
28 win32api.keybd_event(108,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
29
30 browser.find_element_by_xpath('//*[@id="fromDate"]').clear()
31 browser.find_element_by_xpath('//*[@id="fromDate"]').send_keys("2017-04-19") #输入出发时间
32 #browser.find_element_by_xpath('//*[@id="fromDate"]').click()
33 browser.find_element_by_xpath('//*[@id="toDate"]').clear()
34 browser.find_element_by_xpath('//*[@id="toDate"]').send_keys("2017-04-22") #输入返程时间
35 #browser.find_element_by_xpath('//*[@id="toDate"]').click()
36
37
38 '''法二设置地点和时间'''
39 #browser.find_element_by_name("name").send_keys("北京(BJS)") #设置值
40 #browser.find_element_by_name("pass").send_keys("上海(SHA)") #设置值
41 #browser.find_element_by_id("txtAirplaneTime1").send_keys("2016-12-19") #设置值
42
43 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[4]/button').click() #点击按钮 提交表单
44 browser.maximize_window() #最大窗口
45
46 '''保存当前网页'''
47 print(browser.current_url) #当前url
48 #browser.get("http://www.ly.com/FlightQuery.aspx")#cookie保存在对象中,对需认证页面可直接访问
49 data=browser.page_source.encode("utf-8","ignore")
50 fh=open("E:/python27/qun.html","wb")
51 fh.write(data)
52 fh.close()
53 data2=browser.page_source
54 #print data2
55 a=browser.get_screenshot_as_file("E:/Python27/test.jpg")
56 #print(browser.page_source)
57
58 ''''后续可以抓取一些东西'''
59
60 browser.quit()

六、在此推荐虫师博客的学习资料
下面会用 selenium + webdriver + python 实现
关系:
selenium 自动化测试工具 :selnium 1.0 包括:selenium RC 、selenium IDE 、selenium GRID、selenium CORE
webdriver google的自动化测试框架(或者说是套规范API)
webdriver 与seleinum 各有优点,两个团队都认为合并会更牛逼,于是:
selenium 2.0 = selenium RC + webdriver
selenium 可以使用多种语言实现:C# , java , python , ruby ....
环境搭建:
selenium + python自动化测试环境搭建
译:selenium webdriver (python)
----------------轻松自动化系列目录-----------
轻松自动化---selenium-webdriver(python) (一)
开始我们的第一个脚本:
- 熟悉selenium python 代码样式
 - time.sleep() 添加休眠时间
 - print 打印输出信息
 
轻松自动化---selenium-webdriver(python) (二)
- 打印URL
 - 将浏览器最大化
 - 设置浏览器固定宽、高
 - 操控浏览器前进、后退
 
轻松自动化---selenium-webdriver(python) (三)
* 简单对象定位:
- · id
 - · name
 - · class name
 - · link text
 - · partial link text
 - · tag name
 - · xpath
 - · css selector
 
轻松自动化---selenium-webdriver(python) (四)
- 定位一组元素
 
轻松自动化---selenium-webdriver(python) (五)
- 层级定位
 
轻松自动化---selenium-webdriver(python) (六)
操作对象:
- · click 点击对象
 - · send_keys 在对象上模拟按键输入
 - · clear 清除对象的内容,如果可以的话
 
WebElement 另一些常用方法:
- · text 获取该元素的文本
 - · submit 提交表单
 - · get_attribute 获得属性值
 
轻松自动化---selenium-webdriver(python) (七)
多层框架或窗口的定位:
- switch_to_frame()
 - switch_to_window()
 
智能等待:
- implicitly_wait()
 
轻松自动化---selenium-webdriver(python) (八)
调用js方法
execute_script(script, *args)
轻松自动化---selenium-webdriver(python) (九)
- 上传文件
 
轻松自动化---selenium-webdriver(python) (十)
- 处理下拉框
 - switch_to_alert()
 - accept()
 
轻松自动化---selenium-webdriver(python) (十一)
- 控制滚动条到底部
 
轻松自动化---selenium-webdriver(python) (十二)
- l 键盘按键用法
 - l 键盘组合键用法
 - l send_keys() 输入中文运行报错问题
 
selenium-webdriver(python) (十三) -- cookie处理
- driver.get_cookies() 获得cookie信息
 - add_cookie(cookie_dict) 向cookie添加会话信息
 - delete_cookie(name) 删除特定(部分)的cookie
 - delete_all_cookies() 删除所有cookie
 
selenium-webdriver(python) (十四) -- webdriver原理
webdriver 原理分析
selenium-webdriver(python) (十五) -- 鼠标事件
- context_click() 右击
 - double_click() 双击
 - drag_and_drop() 拖动
 
selenium-webdriver(python) (十六) --unittest 框架
- 浅析unittest测试框架
 
作者:今孝
出处:http://www.cnblogs.com/jinxiao-pu
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
参考链接:http://www.cnblogs.com/zzhzhao/p/5380376.html
http://www.cnblogs.com/BigFishFly/p/6380024.html
python爬虫积累(一)--------selenium+python+PhantomJS的使用(转)的更多相关文章
- Python爬虫学习——使用selenium和phantomjs爬取js动态加载的网页
		
1.安装selenium pip install selenium Collecting selenium Downloading selenium-3.4.1-py2.py3-none-any.wh ...
 - python爬虫动态html selenium.webdriver
		
python爬虫:利用selenium.webdriver获取渲染之后的页面代码! 1 首先要下载浏览器驱动: 常用的是chromedriver 和phantomjs chromedirver下载地址 ...
 - Python爬虫之设置selenium webdriver等待
		
Python爬虫之设置selenium webdriver等待 ajax技术出现使异步加载方式呈现数据的网站越来越多,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加 ...
 - python爬虫积累(一)--------selenium+python+PhantomJS的使用
		
最近按公司要求,爬取相关网站时,发现没有找到js包的地址,我就采用selenium来爬取信息,相关实战链接:python爬虫实战(一)--------中国作物种质信息网 一.Selenium介绍 Se ...
 - Python爬虫(二十一)_Selenium与PhantomJS
		
本章将介绍使用Selenium和PhantomJS两种工具用来加载动态数据,更多内容请参考:Python学习指南 Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试 ...
 - PYTHON 爬虫笔记七:Selenium库基础用法
		
知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...
 - python爬虫之初始Selenium
		
1.初始 Selenium[1] 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Moz ...
 - Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干
		
常见验证码 之前的博客中已经解决了一些常见验证码的问题,但是验证码是层出不穷的,目前解决验证码除了通过常规手段解决以外,还可以通过人工智能领域的深度学习去解决 深度学习?! 无疑对爬虫coder提高了 ...
 - python 爬虫与数据可视化--python基础知识
		
摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...
 
随机推荐
- Notepad++怎么增加整行删除快捷键?添加/取消区块注释?
			
1.有网友说 Notepad++ 自带删除行功能,用快捷键 Ctrl+L 就可以删除一行.的确,这个快捷键是可以删除一行文本,但确切的说,Ctrl+L 并不是仅仅删除了一行文本,而是 剪切 了一行文本 ...
 - Confluence 6 配置服务器基础地址示例
			
如果 Confluence 的安装是没有安装在非根目录路径(这个是上下文路径),然后服务器基础 URL 地址应该包括上下文地址.例如,你的 Confluence 正在运行在下面的地址: http:// ...
 - linq2db.EntityFrameworkCore 介绍
			
linq2db.EntityFrameworkCore 是一个ef core的插件,对linq语法的扩展 对复杂的sql都有很好的支持,他是基于linq2db (provided by LINQ To ...
 - 最小标示法模板 poj1509
			
最小标示法:给定一个字符串,不断将其最后一个字符放到开头,最终会得到n个字符串,称这n个字符串循环同构,这些字符串中字典序最小的一个,就是最小表示法 #include<iostream> ...
 - node.js 的热更新
			
1.安装 npm i supervisor -gd 2.运行 supervisor server.js //server.js 是你自己的服务的js文件
 - axios 发送json数据
			
var qs = require('qs'); axios.post(ajaxurl,qs.stringify({ username:'zhangsan', age:'18' })).then(fun ...
 - 步步为营-81-HttpModule(再谈Session)
			
说明:session用于记录数据信息并存放在服务器内存中,但是存在一些问题.例如当使用服务器集群是会出现session丢失等情况.虽然微软提供了一些解决方案(Session进程外存储,或者存到数据库中 ...
 - sublime快捷键的使用
			
Sublime text 3是码农最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率.刚开始可能有些生疏,只要花一两个星期坚持使用并熟悉这些常用的快捷键 ...
 - SRS流媒体服务器搭建+ffmpeg推流VLC取流观看
			
一.编译SRS https://github.com/winlinvip/simple-rtmp-server 目前有1.0-release.2.0.3.0等版本 2.0官方文档地址:https:// ...
 - IDEAL 中配置Tomcat的内存值
			
-server -XX:PermSize=2048M -XX:MaxPermSize=4096m