phantomjs应用(一)

后端君
• 阅读 3492

关注phantomjs比较早,之前也做过一些学习总结,可是一直都没写博客,这里再记录下。为了让同事也开始学习了解下, 提供了一个demo,当然,这个demo也是根据一些资料整理而来。
这个demo很简单,就是访问百度,然后输入关键字,提交表单,然后获取部分结果

system = require('system')
var page = require('webpage').create();
phantom.outputEncoding = 'gb2312';
page.settings = {
    javascriptEnabled: true,
    loadImages: true,
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'
};


todo:
var t_key_word = '';
if (system.args.length === 1) {
    phantom.exit(1);
} else {
    t_key_word = system.args[1];
    console.log("search keyword " + t_key_word + " from www.baidu.com");
}

console.log(t_key_word)


testindex = 0, loadInProgress = false;
page.onConsoleMessage = function (msg) {
    console.log(msg);
};

page.onLoadStarted = function () {
    loadInProgress = true;
    console.log("load started");
};

page.onLoadFinished = function () {
    loadInProgress = false;
    console.log("load finished");
};

var steps = [
    //open url
    function () {
        page.open("http://www.baidu.com");
    },
    //enter input
    function () {
        page.render("step1-1.png");
        page.evaluate(function (key_word) {
            console.log("*****************************");
            var kw = document.getElementById('kw');
            kw.value = key_word;
            return;
        }, t_key_word);
        page.render("step1-2.png");
    },
    //submit
    function () {
        page.evaluate(function () {
            var search_btn = document.getElementById('su');
            search_btn.click();
            return;
        });
        page.render("step2.png");
    },
    //get search result
    function () {
        var content_rst = page.evaluate(function () {
            var rst = new Array();
            var len = document.getElementsByTagName('h3').length;
            for (i = 0; i < len; i++) {
                rst[i] = document.getElementsByTagName('h3')[i].innerHTML;
            }
            return rst;
        });
        console.log(content_rst);
    }
];


interval = setInterval(function () {
    if (!loadInProgress && typeof steps[testindex] == "function") {
        console.log("step " + (testindex + 1));
        steps[testindex]();
        testindex++;
    }
    if (typeof steps[testindex] != "function") {
        console.log("test complete!");
        phantom.exit();
    }
}, 2000);

另存为test.js
然后执行phantomjs test.js javascript
就会搜索javascript关键字

需要注意的地方是:
page.evaluate会启动一个sandbox来执行js, 所以里面的参数不能直接从外面获取,不过还好evaluate接受两个参数,第一个是必需的,表示需要在page上下文运行的函数 function;第二个是可选的,表示需要传给 function的参数 param,比如上面的key_world

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
LeadTools Android 入门教学——运行第一个Android Demo
LeadTools有很多Windows平台下的Demo,非常全面,但是目前开发手机应用的趋势也越来越明显,LeadTools也给大家提供了10个Android的Demo,这篇文章将会教你如何运行第一个AndroidDemo,我想只有把Demo跑起来了,才能更好地使用LeadTools开发自己的原生Android应用,当然大家也可以把Demo改吧改吧就是自
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Python 实现网页截屏、查库、发邮件
本文介绍了使用Python(2.7版本)实现网页截屏、查库、发邮件的demo。用到了selenium、phantomjs、mailer、jinja2、mysqldb还有image,都是比较典型的用法,可复用性比较强。代码本demo是用于发周报邮件的,周报内容包括数据库中的记录以及网页指定元素的截屏。linux中可以用cro
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Selenium与PhantomJS:自动化测试与网页爬虫的完美结合
在当今互联网时代,自动化测试和网页爬虫技术成为了不可或缺的工具,它们不仅提高了开发效率,也为数据采集和分析提供了便利。而Selenium与PhantomJS的结合,则为这两个领域的应用带来了全新的可能性。本文将介绍Selenium与PhantomJS的基本
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(