zoukankan      html  css  js  c++  java
  • 项目包管理

    作用

    生成项目所使用的第三方模块及版本号的文件

    根据文件安装第三方模块

    安装

    1
    pip install pipreqs

    生成依赖文件 

    在项目目录下

    1
    pipreqs ./

      会生成requirements.txt文件,其中包含了项目所导入的包及版本号

    通过指定参数 --encoding=utf8可以解决中文问题

    安装依赖文件

    1
    pip install -r requiements.txt

      ps : 项目中不要有中文(包括注释),否则会报错

    PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API。它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。 PhantomJS 可以用于 页面自动化 , 网络监测 , 网页截屏 ,以及无界面测试等

    一.安装:

      获取安装包,并解压:

     #mkdir ~/bin/

     #cd ~/bin/

     #wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-x86_64.tar.bz2

     #tar -xjvf phantomjs-1.9.7-linux-x86_64.tar.bz2

    将可执行文件放入系统路径: 

     #sudo(有无权限) ln -s /项目名/phantomjs-1.9.7-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs

    安装依赖——fontconfig和freetype: 

     #yum install fontconfig freetype2

    在终端下测试Phantomjs。你应该会看到如下输出:

     #phantomjs -v

    1.9.7

     #cd /root/bin/phantomjs-1.9.7-linux-x86_64/bin

    新建脚本,并确认截图是否OK:

     #vi a.js

    1 var page = require('webpage').create();
    2 page.open('https://www.baidu.com/', function () {
    3     page.render('test/example.png');
    4     phantom.exit();
    5 });

    保存后进行截图测试 

     #phantomjs a.js

    完成后会出现一个test文件夹,在文件夹内有个图片

    查看图片,显示乱码。

    解决方案,安装字体。

     #yum install bitmap-fonts bitmap-fonts-cjk

    再次执行截图

     #phantomjs a.js

    查看图片,字体显示正常。

    二.使用:

    Hello, World!

    新建一个包含下面两行脚本的文本文件:

     #vi hello.js

    1 console.log('Hello, world!');
    2 phantom.exit();

    将文件保存后执行:

     #phantomjs hello.js

     输出结果为:Hello, world!

    第一行将会在终端打印出字符串,第二行 phantom.exit 将退出运行。 
    在该脚本中调用 phantom.exit 是非常重要的,否则 PhantomJS 将根本不会停止。

    脚本参数 – Script Arguments

    Phantomjs如何传递参数呢?如下所示 :

    1 phantomjs examples/arguments.js foo bar baz

    其中的foo, bar, baz就是要传递的参数,如何获取呢:

    复制代码
    1 var system = require('system');
    2 if (system.args.length === 1) {
    3     console.log('Try to pass some args when invoking this script!');
    4 } else {
    5     system.args.forEach(function (arg, i) {
    6             console.log(i + ': ' + arg);
    7     });
    8 }
    9 phantom.exit();
    复制代码

    它将输出 :

    1 0: foo
    2 1: bar
    3 2: baz

    页面加载 – Page Loading

    通过创建一个网页对象,一个网页可以被加载,分析和渲染。

    下面的脚本将示例页面对象最简单的用法,它加载 example.com 并且将它保存为一张图片, example.png 。

     #vi a.js

    1 var page = require('webpage').create();
    2 page.open('https://www.baidu.com/', function () {
    3     page.render('test/example.png');
    4     phantom.exit();
    5 });

    保存后进行截图测试 

     #phantomjs a.js

    由于它的这个特性,PhantomJS 可以用来 网页截屏 ,截取一些内容的快照,比如将网页、SVG存成图片,PDF等,这个功能很牛X。

    接下来的 loadspeed.js 脚本加载一个特殊的URL (不要忘了http协议) 并且计量加载该页面的时间。

    复制代码
     1 var page = require('webpage').create(),
     2     system = require('system'),
     3     t, address;
     4 
     5 if (system.args.length === 1) {
     6     console.log('Usage: loadspeed.js <some URL>');
     7     phantom.exit();
     8 }
     9 
    10 t = Date.now();
    11 address = system.args[1];
    12 page.open(address, function (status) {
    13     if (status !== 'success') {
    14         console.log('FAIL to load the address');
    15     } else {
    16         t = Date.now() - t;
    17         console.log('Loading time ' + t + ' msec');
    18     }
    19     phantom.exit();
    20 });
    复制代码

    在命令行运行该脚本: 

    1 phantomjs loadspeed.js http://www.google.com

    它输出像下面的东西:

    1 Loading  http://www.google.com  Loading time 719 msec

    代码运算 – Code Evaluation

    要想在网页的上下文中对JavaScript 或 CoffeeScript 进行运算,使用 evaluate()方法。代码是在“沙箱”中运行的,它没有办法读取在其所属页面上下文之外的任何JavaScript对象和变量。 evaluate() 会返回一个对象,然而它仅限制于简单的对象并且不能包含方法或闭包。

    这有一个示例来显示网页标题:

    复制代码
    1 var page = require('webpage').create();
    2 page.open(url, function (status) {
    3     var title = page.evaluate(function () {
    4         return document.title;
    5     });
    6     console.log('Page title is ' + title);
    7 });
    复制代码

    任何来自于网页并且包括来自 evaluate() 内部代码的控制台信息,默认不会显示的。要重写这个行为,使用 onConsoleMessage 回调函数,前一个示例可以被改写成:

    复制代码
    1 var page = require('webpage').create();
    2 page.onConsoleMessage = function (msg) {
    3     console.log('Page title is ' + msg);
    4 };
    5 page.open(url, function (status) {
    6     page.evaluate(function () {
    7         console.log(document.title);
    8     });
    9 });
    复制代码

    DOM操作 – DOM Manipulation

    由于脚本好像是一个Web浏览器上运行的一样,标准的DOM脚本和CSS选择器可以很好的工作。这使得PhantomJS适合支持各种 页面自动化任务 。

    下面的  useragent.js  将读取 id  为myagent的元素的  textContent  属性:

    复制代码
     1 var page = require('webpage').create();
     2 console.log('The default user agent is ' + page.settings.userAgent);
     3 page.settings.userAgent = 'SpecialAgent';
     4 page.open('http://www.httpuseragent.org', function (status) {
     5     if (status !== 'success') {
     6         console.log('Unable to access network');
     7     } else {
     8         var ua = page.evaluate(function () {
     9             return document.getElementById('myagent').textContent;
    10         });
    11         console.log(ua);
    12     }
    13     phantom.exit();
    14 });
    复制代码

    上面示例同样提供了一种自定义 user agent 的方法。

    使用JQuery及其他类库:

    复制代码
    1 var page = require('webpage').create();
    2 page.open('http://www.sample.com', function() {
    3     page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
    4         page.evaluate(function() {
    5             $("button").click();
    6         });
    7         phantom.exit()
    8     });
    9 });
    复制代码

    网络请求及响应 – Network Requests and Responses

    将一个页面从一台远程服务器请求一个资源的时候,请求和响应均可以通过 onResourceRequested  和  onResourceReceived  回调方法追踪到。示例  netlog.js :

    复制代码
    1 var page = require('webpage').create();
    2 page.onResourceRequested = function (request) {
    3     console.log('Request ' + JSON.stringify(request, undefined, 4));
    4 };
    5 page.onResourceReceived = function (response) {
    6     console.log('Receive ' + JSON.stringify(response, undefined, 4));
    7 };
    8 page.open(url);
    复制代码

    获取如何把该特性用于HAR 输出以及基于YSlow的性能分析的更多信息,请参阅 网络监控页面 。

    selenium.common.exceptions.TimeoutException: Message: Screenshot: available via screen

    在使用selenium+phantomjs的时候在Windows平台下能够正常工作,在Linux下却不能,并得到错误信息:

    selenium.common.exceptions.TimeoutException: Message: 
    Screenshot: available via screen

    在ST上找到答案:http://stackoverflow.com/a/36159299/4447404

    driver = webdriver.PhantomJS(service_args=['--ignore-ssl-errors=true', '--ssl-protocol=TLSv1'])

    在初始化driver时传入参数"service_args=['--ignore-ssl-errors=true', '--ssl-protocol=TLSv1']"即可。

  • 相关阅读:
    fn project 试用之后的几个问题的解答
    fn project 扩展
    fn project 生产环境使用
    fn project 对象模型
    fn project AWS Lambda 格式 functions
    fn project 打包Function
    fn project Function files 说明
    fn project hot functions 说明
    fn project k8s 集成
    fn project 私有镜像发布
  • 原文地址:https://www.cnblogs.com/xdlzs/p/10744130.html
Copyright © 2011-2022 走看看