最近按公司要求,爬取相关网站时,发现没有找到js包的地址,我就采用selenium来爬取信息,相关实战连接:python爬虫实战(一)--------中国做物种质信息网css
Selenium 是什么?一句话,自动化测试工具。它支持各类浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,若是你在这些浏览器里面安装一个 Selenium 的插件,那么即可以方便地实现Web界面的测试。换句话说叫 Selenium 支持这些浏览器驱动。Selenium支持多种语言开发,好比 Java,C,Ruby等等,有 Python 吗?那是必须的!安装只要cmd中 pip install selenium 便可。html
对于通常网站来讲scrapy、requests、beautifulsoup等均可以爬取,可是有些信息须要执行js才能显现,并且你肉眼所能看到的基本都能爬取下来,在学习中遇到了,就记录下来方便之后查看。前端
webdrive是selenium中一个函数:java
1 from selenium import webdriver 2 driver = webdriver.PhantomJS() 3 driver.get('网址')
其中PhantomJS同时能够换成Chrome、Firefox、Ie等等,可是PhantomJS是一个无头的浏览器,运行是不会跳出相应的浏览器,运行相对效率较高。在调试中能够先换成Chrome,方便调试,最后再换成PhantomJS便可。python
PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit做为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你能够在基于webkit浏览器作的事情,它都能作到。它不只是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操做、JSON、HTML五、Canvas、SVG等,同时也提供了处理文件I/O的操做,从而使你能够向操做系统读写文件等。PhantomJS的用处可谓很是普遍,诸如前端无界面自动化测试(须要结合Jasmin)、网络监测、网页截屏等。git
PhantomJS官方地址:http://phantomjs.org/。github
PhantomJS官方API:http://phantomjs.org/api/。web
PhantomJS官方示例:http://phantomjs.org/examples/。api
PhantomJS GitHub:https://github.com/ariya/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 自动化测试工具 :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 ....
环境搭建:
开始咱们的第一个脚本:
* 简单对象定位:
操做对象:
WebElement 另外一些经常使用方法:
多层框架或窗口的定位:
智能等待:
调用js方法
execute_script(script, *args)
webdriver 原理分析
做者:今孝
出处:http://www.cnblogs.com/jinxiao-pu
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接。
参考连接:http://www.cnblogs.com/zzhzhao/p/5380376.html
http://www.cnblogs.com/BigFishFly/p/6380024.html