PhantomJS

PhantomJS 是一个基于WebKit的服务器端JavaScript API,它无需浏览器的支持即可实现对Web的支持,且原生支持各种Web标准,如DOM 处理、JavaScript、CSS选择器、JSON、Canvas和可缩放矢量图形SVG。PhantomJS主要是通过JavaScript和 CoffeeScript控制WebKit的CSS选择器、可缩放矢量图形SVG和HTTP网络等各个模块。PhantomJS主要支持Windows、 Mac OS、Linux三个平台,并且提供了对应的二进制安装包。

PhantomJS 的使用场景如下:

  • 无需浏览器的Web测试:无需浏览器的情况下进行快速的Web测试,且支持很多测试框架,如YUI Test、Jasmine、WebDriver、Capybara、QUnit、Mocha等。
  • 页面自动化操作:使用标准的DOM API或一些JavaScript框架(如jQuery)访问和操作Web页面。
  • 屏幕捕获:以编程方式抓起CSS、SVG和Canvas等页面内容,即可实现网络爬虫应用。构建服务端Web图形应用,如截图服务、矢量光栅图应用。
  • 网络监控:自动进行网络性能监控、跟踪页面加载情况以及将相关监控的信息以标准的HAR格式导出。

PhantomJS 已形成了一个功能非常强大的生态圈内容,相关项目如下:

  • CasperJS:一个开源的导航脚本处理和高级测试工具
  • Poltergeist :测试工具Capybara的测试驱动
  • Guard::Jasmine:能够基于Rails实现自动化测试Jasmine的Specs
  • GhostDriver:远程 WebDriver 有线协议的开源实现
  • PhantomRobot:PhantomJS机器人测试框架
  • Mocha-PhantomJS:JavaScript测试框架Mocha的客户端

此 外,生态圈还包括基于PhantomJS实现了众多截屏工具,如capturejs、pageres、phantomjs-screenshots、 manet、screenshot-app等;以及Node.js、Django、PHP、Sinatra等语言的截图API和Confess、 GhostStory、Grover等众多工具。

下载地址:

http://phantomjs.org/download.html

代码样例:

  1. #/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from selenium import webdriver
  5. import time
  6. import xlsxwriter
  7. import json
  8.  
  9. def main(url):
  10.  
  11. driver = webdriver.PhantomJS()
  12. driver.get(url)
  13. time.sleep(5)
  14.  
  15. with open("./tencent_yyb.json", "wb") as write_obj:
  16. try:
  17. # numstr = driver.find_elements_by_xpath('//*[@id="J_CommentCount"]')[0].text
  18. # num = int(numstr[1:4])
  19. flag = True
  20. while flag: # 循环,无法点击“查看更多评论”报错,重置标志位flag完成获取所有内容
  21. try:
  22. driver.find_element_by_id("J_DetCommentShowMoreBtn").click() # 点击“查看更多评论”
  23. #driver.implicitly_wait(10)
  24. time.sleep(1)
  25. except Exception as err:
  26. print err
  27. flag = False
  28.  
  29. data = driver.find_elements_by_xpath('//*[@id="J_DetDataContainer"]/div/div[8]/ul/li')
  30.  
  31. repeat = {} # 缓存数据
  32. for item in data:
  33. val_list = item.text.split('\n')
  34. if len(val_list) == 3:
  35. ptime = val_list[1].encode("utf-8")
  36. pcontent = val_list[2].encode("utf-8")
  37. if ptime not in repeat.keys(): # 去重
  38. repeat[ptime] = pcontent
  39. write_obj.write("{\"发布时间\":\"" + ptime + "\", \"发布内容\":\"" + pcontent + "\"}\n" )
  40. else:
  41. ptime = val_list[1].encode("utf-8")
  42. pcontent = ' '
  43. if ptime not in repeat.keys():
  44. repeat[ptime] = pcontent
  45. write_obj.write("{\"发布时间\":\"" + ptime + "\", \"发布内容\":\"" + pcontent + "\"}\n" )
  46. except Exception as err:
  47. print err
  48. finally:
  49. driver.quit()
  50.  
  51. def get_num(name):
  52. jfilename = "./" + name + ".json"
  53. count = len(open(jfilename, "rU").readlines()) - 1
  54. return count
  55.  
  56. # xls转换写入
  57. def w_xls(url, name):
  58. perfix = time.strftime('%Y%m%d')
  59. xfilename = "./" + name + '_' + perfix + ".xlsx"
  60. jfilename = "./" + name + ".json"
  61. workbook = xlsxwriter.Workbook(xfilename)
  62. worksheet1 = workbook.add_worksheet()
  63. lines = int(get_num(name))
  64. worksheet1.set_column = ('A:C', lines+1)
  65. worksheet1.write('A1', 'URL')
  66. worksheet1.write('B1', u'发布时间')
  67. worksheet1.write('C1', u'发布内容')
  68.  
  69. row = 1
  70. with open(jfilename, "r") as obj_read:
  71. for line in obj_read.readlines():
  72. data = json.loads(line)
  73. worksheet1.write(row, 0, url)
  74. worksheet1.write(row, 1, data[u'发布时间'])
  75. worksheet1.write(row, 2, data[u'发布内容'])
  76. row += 1
  77.  
  78. if __name__ == '__main__':
  79.  
  80. url = ''
  81.  
  82. main(url)
  83. time.sleep(3)
  84. w_xls(url, "tencent_yyb")

python + selenium + PhantomJS 获取腾讯应用宝APP评论的更多相关文章

  1. Python+selenium之获取文本值和下拉框选择数据

    Python+selenium之获取文本值和下拉框选择数据 一.结合实例进行描述 1. 实例如下所示: #新增标签操作 def func_labels(self): self.driver.find_ ...

  2. Python+Selenium自动化-获取页面信息

    Python+Selenium自动化-获取页面信息   1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...

  3. python+selenium+PhantomJS爬取网页动态加载内容

    一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此时,我们使用web自动化测试化工具Selenium+无界面浏览 ...

  4. python+selenium+PhantomJS批量投递智联简历(不要用自己的账号进行测试,请使用小号,很烦人的,哈哈哈)

    1.环境python2.7+selenium+PhantomJS(软件安装和库的安装网上都有教程我们跳过,so easy) 2.原理 绕过首页登录需要验证码,直接进入搜索栏,输入搜索的职位+地区搜索出 ...

  5. python selenium+phantomjs alert()弹窗报错

    问题:用selenium+phantomjs 模拟登陆,网页用JavaScript的alert("登陆成功")弹出框,但是用switch_to_alert().accept()报错 ...

  6. 看我怎么扒掉CSDN首页的底裤(python selenium+phantomjs爬取CSDN首页内容)

    这里只是学习一下动态加载页面内容的抓取,并不适用于所有的页面. 使用到的工具就是python selenium和phantomjs,另外调试的时候还用了firefox的geckodriver.exe. ...

  7. python selenium+phantomJS自动化测试环境

    0x00配置phantomJS 1. 在windows平台下 此种方法是弹浏览器进行自动化测试的. 1.下载谷歌的驱动 https://chromedriver.storage.googleapis. ...

  8. 基于Python, Selenium, Phantomjs无头浏览器访问页面

    引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...

  9. Python+Tornado+Tampermonkey 获取某讯等主流视频网站的会员视频解析播放

    近期,<哪吒之魔童降世>在各大视频软件可以看了,然而却是一贯的套路,非会员谢绝观看!!!只能从国内那些五花八门的视频网站上找着看了,或者通过之前本人说的 Chrome 的油猴插件,传送门  ...

随机推荐

  1. 在Function对象上扩展method方法

    ;(function() { /** * 在Function对象上扩展method方法 * @param {String} name 扩展的方法名称 * @param {Function} callb ...

  2. Entity Framework4.0 (一)概述(EF4 的Database First方法)

    转自:http://www.cnblogs.com/marksun/archive/2011/12/15/2289582.html Entity Framework4.0(以后简称:EF4),是Mic ...

  3. Windows Phone:如何检查WMAppManifest中的Capability属性

    在Windows Phone应用中有一个应用程序清单(WMAppManifest.xml),其中对于不同的应用可以设定Capability来告知需要哪些特性或功能,详细内容可以参考官方文档: http ...

  4. JS 之高级函数

    作用域安全的构造函数 当使用new调用构造函数时,构造函数内部this对象会指向新创建的对象实例.如果不使用new,直接调用的话,则this对象会映射到window对象上.所以需要判断下. eg: f ...

  5. Caffe学习系列(8):solver优化方法

    上文提到,到目前为止,caffe总共提供了六种优化方法: Stochastic Gradient Descent (type: "SGD"), AdaDelta (type: &q ...

  6. Android连接网络打印机,jSocket连接网络打印机

    老大写的一个打印工具类,记录一下. package com.Ieasy.Tool; import android.annotation.SuppressLint; import java.io.IOE ...

  7. Linux 读书笔记 一

    一.Linux 简介 实验介绍 本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识.如果你已经有过充分的了解,可以跳过本节,直接进入下一个实验. 一.Linux 为何物 ...

  8. 创建Maven工程

    一.Maven工程创建 File->New->Other,进入: 点击Next,进入: 勾选上Create a simple project(不使用骨架) 点击Next,进入: 输入项目名 ...

  9. android官方开源的高性能异步加载网络图片的Gridview例子

    这个是我在安卓安卓巴士上看到的资料,放到这儿共享下.这个例子android官方提供的,其中讲解了如何异步加载网络图片,以及在gridview中高效率的显示图片此代码很好的解决了加载大量图片时,报OOM ...

  10. <实训|第四天>Linux下的vim你真的掌握了吗?附上ftp远程命令上传。

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...