分类 学习类 下的文章

网页保存为图片、PDF

近日工作需要,需要输入一个网址,然后将网站保存为图片格式以及pdf格式
找了半天,发现还是phantomjs好用,之前phantomjs做爬虫的时候接触过一些,没想到这么强大
PhantomJS是一个基于webkit的javascript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、html5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。PhantomJS的用处可谓非常广泛,诸如网络监测、网页截屏、无需浏览器的 Web 测试、页面访问自动化等。
如果做自动化测试的小伙伴应该很熟悉这个,我这个门外汉也就接触过一点皮毛。
命令如下:
先找到phantomjs的安装路径,然后进入安装目录下面的examples目录。运行下面这行命令即可
phantomjs rasterize.js 网址 保存的名字

保存的名字后缀为pdf 则将网页保存为了pdf格式的文档,如果保存的名字后缀为png,则将网页保存为截图

下面是rasterize.js的代码,官方自带的一个js,挺好用的

"use strict";
var page = require('webpage').create(),
    system = require('system'),
    address, output, size;

if (system.args.length < 3 || system.args.length > 5) {
    console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]');
    console.log('  paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');
    console.log('  image (png/jpg output) examples: "1920px" entire page, window width 1920px');
    console.log('                                   "800px*600px" window, clipped to 800x600');
    phantom.exit(1);
} else {
    address = system.args[1];
    output = system.args[2];
    page.viewportSize = { width: 600, height: 600 };
    if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") {
        size = system.args[3].split('*');
        page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
                                           : { format: system.args[3], orientation: 'portrait', margin: '1cm' };
    } else if (system.args.length > 3 && system.args[3].substr(-2) === "px") {
        size = system.args[3].split('*');
        if (size.length === 2) {
            pageWidth = parseInt(size[0], 10);
            pageHeight = parseInt(size[1], 10);
            page.viewportSize = { width: pageWidth, height: pageHeight };
            page.clipRect = { top: 0, left: 0, width: pageWidth, height: pageHeight };
        } else {
            console.log("size:", system.args[3]);
            pageWidth = parseInt(system.args[3], 10);
            pageHeight = parseInt(pageWidth * 3/4, 10); // it's as good an assumption as any
            console.log ("pageHeight:",pageHeight);
            page.viewportSize = { width: pageWidth, height: pageHeight };
        }
    }
    if (system.args.length > 4) {
        page.zoomFactor = system.args[4];
    }
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
            phantom.exit(1);
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}

1234.png
用phantomjs去截取中文页面的网站可能会出现乱码的情况,也就是截图中中文的位置全是方框。
解决办法就是安装字体。
在centos中执行:yum install bitmap-fonts bitmap-fonts-cjk
在ubuntu中执行:sudo apt-get install xfonts-wqy
这样再去截图中文的页面就不会出现一堆的方框了。

mac zsh+iterm2+vim配置

首先安装oh-my-zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

然后下载字体库

https://github.com/powerline/fonts

运行

install.sh

然后下载iterm2的配色方案

https://github.com/altercation/solarized

然后在iterm2设置中导入配置方案

Solarized Dark.itermcolors

然后设置agnoster主题
进入~/.zshrc打开.zshrc文件,然后将ZSH_THEME后面的字段改为agnoster。ZSH_THEME="agnoster"(agnoster即为要设置的主题)

然后简单配置vim编辑器
创建文件

.vimrc

然后在里面写入
set nu
color scheme desert
syntax on

iterm2 快捷键大全 Mac item2常用快捷键

标签

新建标签:command + t

关闭标签:command + w

切换标签:command + 数字 command + 左右方向键

切换全屏:command + enter

查找:command + f

分屏

垂直分屏:command + d

水平分屏:command + shift + d

切换屏幕:command + option + 方向键 command + [ 或 command + ]

查看历史命令:command + ;

查看剪贴板历史:command + shift + h

其他

清除当前行:ctrl + u

到行首:ctrl + a

到行尾:ctrl + e

前进后退:ctrl + f/b (相当于左右方向键)

上一条命令:ctrl + p

搜索命令历史:ctrl + r

删除当前光标的字符:ctrl + d

删除光标之前的字符:ctrl + h

删除光标之前的单词:ctrl + w

删除到文本末尾:ctrl + k

交换光标处文本:ctrl + t

清屏1:command + r

清屏2:ctrl + l

自带有哪些很实用的功能/快捷键

⌘ + 数字在各 tab 标签直接来回切换

选择即复制 + 鼠标中键粘贴,这个很实用

⌘ + f 所查找的内容会被自动复制

⌘ + d 横着分屏 / ⌘ + shift + d 竖着分屏

⌘ + r = clear,而且只是换到新一屏,不会想 clear 一样创建一个空屏

ctrl + u 清空当前行,无论光标在什么位置

输入开头命令后 按 ⌘ + ; 会自动列出输入过的命令

⌘ + shift + h 会列出剪切板历史

可以在 Preferences > keys 设置全局快捷键调出 iterm,这个也可以用过 Alfred 实现

我常用的一些快捷键

⌘ + 1 / 2 左右 tab 之间来回切换,这个在 前面 已经介绍过了

⌘← / ⌘→ 到一行命令最左边/最右边 ,这个功能同 C+a / C+e

⌥← / ⌥→ 按单词前移/后移,相当与 C+f / C+b,其实这个功能在Iterm中已经预定义好了,⌥f / ⌥b,看个人习惯了

好像就这几个。。囧

设置方法如下

当然除了这些可以自定义的也不能忘了 linux 下那些好用的组合

C+a / C+e 这个几乎在哪都可以使用

C+p / !! 上一条命令

C+k 从光标处删至命令行尾 (本来 C+u 是删至命令行首,但iterm中是删掉整行)

C+w A+d 从光标处删至字首/尾

C+h C+d 删掉光标前后的自负

C+y 粘贴至光标后

C+r 搜索命令历史,这个较常用

laravel 手记

laravel 5.2 手动增加helpers.php

在app目录下面建立文件夹Libraries.在该文件夹下面创建文件helpers.php,文件内容如下

<?php
/**
 * User: Sky
 * Date: 2016-07-25
 * Time: 13:25
 */

if(! function_exists('TestFun')){
    function TestFun($test){
        return $test
    }

}

然后修改bootstrap目录下面的autoload.php文件内容
require __DIR__.'/../vendor/autoload.php';下面添加require __DIR__.'/../app/Libraries/helpers.php';
这样就可以了= =,

==========================================================================
删除laravel中安装过不想用的包

composer remove "vendor/packagename"

获取客户端ip的话用

use Illuminate\Support\Facades\Request;

然后在用该类下面的getClientIp方法
如:

$ip=Request::getClientIp()

=========================================================================
阿里大于sms短信通知接口

https://packagist.org/packages/iscms/alisms-for-laravel

配置方法:
从终端或命令行进入您的项目目录,运行

composer require iscms/alisms-for-laravel

iscms\Alisms\AlidayuServiceProvider::class

加入config\app.php的Providers下 类似

 ...
    /*
     * Application Service Providers...
    */
    App\Providers\AppServiceProvider::class,
    App\Providers\AuthServiceProvider::class,
    App\Providers\EventServiceProvider::class,
    App\Providers\RouteServiceProvider::class,
    ...
    iscms\Alisms\AlidayuServiceProvider::class

运行

php artisan vendor:publish

将配置文件发布到您的配置目录中 4. 您的config目录应该增加了alisms.php配置文件

<?php
    return [
        'KEY' =>env('ALISMS_KEY',null),
        'SECRETKEY'=>env('ALISMS_SECRETKEY',null),
    ];

5.然后您需要在您项目的 ENV 配置文件中写入 SMS 配置 例如

   ALISMS_KEY=23305789
   ALISMS_SECRETKEY=**************

此处ALISMS_SECRETKEY是指您的账户应用密码,请勿透露给他人

开始使用
在您需要调用短信服务的控制器中,引用SMS

use iscms\Alisms\SendsmsPusher as Sms;
public function __construct(Sms $sms)
{
   $this->sms=$sms;
}

public function index()
{
   $result=$this->sms->send("$phone","$name","$content",'$code');
}
  1. 返回执行发送的结果

参数说明
在开始使用中 send 方法一共加入了4个参数

$phone,$name,$content,$code $phone 指接受短信方的短信号码, $name 指短信签名
可以在阿里大鱼短信签名 http://www.alidayu.com/admin/service/sign 找到 $content
是指短信模板中的变量内容.举个例子

在自己的阿里大鱼模板里面有下面一个短信模板

 模板名称: 身份验证验证码
    模板ID: SMS_3910275
    *模板内容:
    验证码${code},您正在进行${product}身份验证,打死不要告诉别人哦!
那么里面存在着2个变量需要替换,一个是${code} ,一个是${product}

那么对应的我们的$content 就应该为

 {
      code:"生成的验证码",
      product:"示例项目"
    }

$code 指在阿里云中的模板ID,上面的例子中使用了一个身份验证模板,那$code 应该填写 > SMS_3910275
到这里应该没有问题了,开始发送短信吧~ ^_^
================================================================================
其他的,用到了在补上

Idea 激活服务器

主要平时老用jetbrains系列的编辑器,每次还要激活找激活码什么的,太麻烦了,就自己搭建了一个,方便自己用.

激活过程如下:
1、激活的时候选择License server
2、填写server地址为http://idea.03sec.com:8727
3、保存,激活成功!
下载.png