Python selenium基础之PhantomJS

1、对于一些动态js,初步get请求一般访问不到,

一、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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章