zoukankan      html  css  js  c++  java
  • python + selenium + PhantomJS 获取腾讯应用宝APP评论

    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('
    ')
    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 + ""}
    " )
    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 + ""}
    " )
    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 
    79 if __name__ == '__main__':
    80 
    81     url = ''
    82 
    83     main(url)
    84     time.sleep(3)
    85     w_xls(url, "tencent_yyb")
    View Code
  • 相关阅读:
    Jmeter之参数化
    JMETER之一般使用和断言(响应断言和JSON断言)
    JMETER之工具设置和可执行元件介绍
    fiddler 之简单并发、弱网设置
    fiddler之断点、篡改和伪造数据
    fiddler之手机端连接
    fiddler之工具介绍
    fiddler之图标描述
    原生js添加和删除类名
    抽象类和接口
  • 原文地址:https://www.cnblogs.com/shhnwangjian/p/5332792.html
Copyright © 2011-2022 走看看