var page = require('webpage').create();
page.open('http://www.baidu.com', function(status){
console.log(status);
phantom.exit();
});
var page = require('webpage').create();
var settings = {
operation: 'POST',
encoding: 'utf8',
headers: {
'Content-Type': 'application/json'
},
data: JSON.stringify({
some: 'data',
another: ['custom', 'data']
})
};
page.open('http://www.baidu.com', settings, function(status){
console.log('Status:' + status);
...
});
var page = require('webpage').create();
page.open('http://www.baidu.com', function(status){
var title = page.evaluate(function(){
return document.title;
});
console.log('Page title is ' + title);
phantom.exit();
});
var page = require('webpage').create();
page.onConsoleMessage = function(msg){
console.log('Page title is ' + msg);
};
page.open('http://www.baidu.com', function(status){
page.evaluate(function(){
console.log(document.title);
});
phantom.exit();
});
var page = require('webpage').create();
page.open('http://www.baidu.com', function(){
page.includeJs('http://path/to/jquery.min.js', function(){
page.evaluate(function(){
$('button').click();
});
phantom.exit();
});
});
var page = require('webpage').create();
page.viewportSize = { width: 1920, height: 1080 };
page.open('http://www.baidu.com', function start(status){
page.render('baidu.jpeg', {format: 'jpeg', quality: '100'});
phantom.exit();
});
0x01 动态爬虫
Selenium([səˈli:niəm])Chrome、Safari、Firefox等主流界面式浏览器,只需要在浏览器中安装一个Selenium插件,就可以实现Web界面的测试Java、C、Ruby、Python等PyCharm 5==>Project Interpreter==>Available Packages中搜索Selenium安装PhantomJS([ˈfæntəm])WebKit的服务器端JavaScript API,全面支持Web而不需浏览器支持,是一个无界面的,可脚本编程的WebKit浏览器引擎WebKit:开源的浏览器引擎,也是Mac OS X系统引擎框架版本的名称,主要用于Safari、Dashboard、Mail和其他一些Mac OS X程序Web标准:DOM操作、CSS选择器、JSON、Canvas、SVGUI界面的网站测试phantomjs.exe添加至环境变量中Path中添加路径即可直接在CMD下调用PhantomJS提供了一个完整的REPL环境,允许用户通过命令行与PhantomJS进行交互,输入phantomjs就可以进入该环境REPL:Read Eval Print Loop交互式编程环境console.log()在终端窗口显示phantom.exit()退出PhantomJS环境,不管什么样的程序,exit这一行都可少Python可以在REPL环境中定义函数,也可以将函数写在js文件中,直接调用webpage模块PhantomJS核心模块,用于网页操作PhantomJS的webpage模块,并创建一个实例open():用于打开具体的网页两个参数s是一个表示状态的字符串,如果成功打开则是success,否则为failPhantomJS就会报告网页打开成功,而不管服务器是否返回404或500错误open()方法默认使用的是GET方法,与服务器通信,也可以使用其他方法POST方法POST方法向服务器发送数据,第二个参数指定HTTP方法,第三个参数指定该方法所传输的数据open()方法还允许提供配置对象,对HTTP请求进行更详细的配置evaluate():用于打开网页以后,在页面中执行JavaScript代码console语句,以及evaluate方法内部的console语句,默认不会显示在命令行,如果要显示的话,则需要利用onConsoleMessage回调函数来监听这个事件includeJs():用于页面加载外部脚本,加载结束后就调用指定的回调函数jQuery脚本,然后点击所有的按钮phantom.exit()语句放在page.includeJs()方法的回调函数之中,否则页面会过早退出render():用于将网页保存为图片,参数就是指定的文件名,根据后缀名,可以保存为不同的格式,支持PNG GIF JPEG PDFformat字段用于指定图片格式,quality字段用于指定图片质量,最小为0,最大为100,必须是整数viewportSize、zoomFactor属性viewportSize:指定浏览器视口的大小,即网页加载的初始浏览器窗口大小height字段必须指定,不可省略zoomFactor:指定渲染时(render方法和renderBase64方法)页面的放大系数,默认是1(即100%)onResourceRequested属性HTTP请求的元数据对象,第二个参数是发出的网络请求对象HTTP请求包括以下字段id:所请求资源的编号method:所使用的HTTP方法url:所请求的资源URLtime:一个包含请求时间的Date对象headers:HTTP头信息数组abort():终止当前的网络请求,这会导致调用onResourceError回调函数changeUrl(newUrl):改变当前网络请求的URLsetHeader(key, value):设置HTTP头信息onResourceReceived属性HTTP响应的元数据对象,包含以下字段id:所请求资源的编号url:所请求的资源URLtime:包含HTTP响应时间的Date对象headers:响应的HTTP头信息数组bodySize:解压缩后的收到的内容大小contentType:接到的内容种类redirectURL:重定向URLstage:对于多数据块的HTTP响应,头一个数据块为start,最后一个数据块为endstatus:HTTP状态码,成功时为200statusText:HTTP状态信息,比如OKHTTP响应非常大,分成多个数据块发送,onResourceReceived会在收到每个数据块时触发回调函数response对象是没有response.body的具体内容的system模块system模块可以加载操作系统变量,system.args就是参数数组,类似命令行参数JS中===和!=====和!==只有在相同类型下,才会比较其值==和!=比较若类型不同,先尝试转换类型,再做值的比较,最后返回值的比较结果PhantomJS可以实现JavaScript动态解析HOOK所有的网络请求0x02 LySRC Public Vulnerabilities
LySRC上的公开漏洞urllib.urlretrieve下载图片,替换掉原html中的图片保存至本地