python + selenium + PhantomJS 获取腾讯应用宝APP评论

发表于:2017-10-11 14:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:datadw    来源:51Testing软件测试网采编

  PhantomJS
  PhantomJS是一个基于WebKit的服务器端JavaScriptAPI,它无需浏览器的支持即可实现对Web的支持,且原生支持各种Web标准,如DOM处理、JavaScript、CSS选择器、JSON、Canvas和可缩放矢量图形SVG。PhantomJS主要是通过JavaScript和CoffeeScript控制WebKit的CSS选择器、可缩放矢量图形SVG和HTTP网络等各个模块。PhantomJS主要支持Windows、MacOS、Linux三个平台,并且提供了对应的二进制安装包。
  PhantomJS的使用场景如下:
  无需浏览器的Web测试:无需浏览器的情况下进行快速的Web测试,且支持很多测试框架,如YUITest、Jasmine、WebDriver、Capybara、QUnit、Mocha等。
  页面自动化操作:使用标准的DOMAPI或一些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/envpython
  2#-*-coding:utf-8-*-
  3
  4fromseleniumimportwebdriver
  5importtime
  6importxlsxwriter
  7importjson
  8
  9defmain(url):
  10
  11driver=webdriver.PhantomJS()
  12driver.get(url)
  13time.sleep(5)
  14
  15withopen("./tencent_yyb.json","wb")aswrite_obj:
  16try:
  17#numstr=driver.find_elements_by_xpath('//*[@id="J_CommentCount"]')[0].text
  18#num=int(numstr[1:4])
  19flag=True
  20whileflag:#循环,无法点击“查看更多评论”报错,重置标志位flag完成获取所有内容
  21try:
  22driver.find_element_by_id("J_DetCommentShowMoreBtn").click()#点击“查看更多评论”
  23#driver.implicitly_wait(10)
  24time.sleep(1)
  25exceptExceptionaserr:
  26printerr
  27flag=False
  28
  29data=driver.find_elements_by_xpath('//*[@id="J_DetDataContainer"]/div/div[8]/ul/li')
  30
  31repeat={}#缓存数据
  32foritemindata:
  33val_list=item.text.split('\n')
  34iflen(val_list)==3:
  35ptime=val_list[1].encode("utf-8")
  36pcontent=val_list[2].encode("utf-8")
  37ifptimenotinrepeat.keys():#去重
  38repeat[ptime]=pcontent
  39write_obj.write("{\"发布时间\":\""+ptime+"\",\"发布内容\":\""+pcontent+"\"}\n")
  40else:
  41ptime=val_list[1].encode("utf-8")
  42pcontent=''
  43ifptimenotinrepeat.keys():
  44repeat[ptime]=pcontent
  45write_obj.write("{\"发布时间\":\""+ptime+"\",\"发布内容\":\""+pcontent+"\"}\n")
  46exceptExceptionaserr:
  47printerr
  48finally:
  49driver.quit()
  50
  51defget_num(name):
  52jfilename="./"+name+".json"
  53count=len(open(jfilename,"rU").readlines())-1
  54returncount
  55
  56#xls转换写入
  57defw_xls(url,name):
  58perfix=time.strftime('%Y%m%d')
  59xfilename="./"+name+'_'+perfix+".xlsx"
  60jfilename="./"+name+".json"
  61workbook=xlsxwriter.Workbook(xfilename)
  62worksheet1=workbook.add_worksheet()
  63lines=int(get_num(name))
  64worksheet1.set_column=('A:C',lines+1)
  65worksheet1.write('A1','URL')
  66worksheet1.write('B1',u'发布时间')
  67worksheet1.write('C1',u'发布内容')
  68
  69row=1
  70withopen(jfilename,"r")asobj_read:
  71forlineinobj_read.readlines():
  72data=json.loads(line)
  73worksheet1.write(row,0,url)
  74worksheet1.write(row,1,data[u'发布时间'])
  75worksheet1.write(row,2,data[u'发布内容'])
  76row+=1
  77
  78
  79if__name__=='__main__':
  80
  81url=''
  82
  83main(url)
  84time.sleep(3)
  85w_xls(url,"tencent_yyb")
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号