Splash 是一个JavaScript渲染服务,是一个带有HTTP API 的轻量级浏览器,同时它对接了Python中Twisted和QT库。
1.功能介绍
1)异步方法处理多个网页渲染过程;
2)获取渲染后的页面的源代码或截图;
3)通过关闭图片渲染或者使用Adblock规则来加快页面渲染速度;
4)可执行特定的JavaScript脚本;
5)可通过Lua脚本来控制网页渲染过程;
6)获取渲染的详细过程并通过HAR(HTTP Archive)格式呈现
2.Splash Lua脚本
1)入口及返回值
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
function main(splash, args) splash:go("http://www.baidu.com") splash:wait(0.5) local title = splash:evaljs("document.title") return {title=title} end
实例结果返回了网页的标题
2)异步处理
在脚本内调用wait()方法类似Python中的sleep(),其参数为等待的秒数。当Splash执行到此方法时,它会转而去处理其他任务,然后在指定的时间过后再回来继续处理
3.Splash 对象属性
1)args
该属性可以获取加载时配置的参数
2)js_enabled
该属性是Splash的JavaScript执行开关,可以将其配置为true或false来控制是否执行js代码,默认为true
3)resource_timeout
该属性可以设置加载的超时时间,单位是秒
4)images_enabled
该属性可以设置图片是否加载
5)plugins_enabled
该属性可以控制浏览器插件是否开启(如Flash等)
6)scroll_position
该属性可以控制页面上下或左右滚动
4.Splash 对象的方法
1)go()
该方法用来请求某个链接,可以模拟GET和POST请求,同时支持传入请求头、表单等数据
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
ok,reason = splash:go{url,baseurl=nil,headers=nil,http_method="GET",body=nil,formdata=nil} url: 请求的URL baseurl: 可选参数,默认为空,表示资源加载相对路径 headers: 可选参数,默认为空,表示请求头 http_method: 可选参数,默认为GET,同时支持POST body:可选参数,默认为空,发送POST请求时的表单数据,使用的Content-type为application/json formdata: 可选参数,默认为空,使用POST请求时的表单数据,使用的Content-type为application/x-www-form-urlencoded
2)wait()
该方法可以控制页面的等待时间
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
ok, reason = splash:wait{time, cancel_on_redirect=false, cancel_on_error=true} time: 等待的秒数 cancel_on_redirect: 可选参数,默认为false,如果为true,表示如果发生了重定向就停止等待,并返回重定向结果 cancel_on_error: 可选参数,默认为true,表示如果发生了加载错误,就停止等待
3)jsfunc()
此方法可以直接调用JavaScript定义的方法,但是所调用的方法需要用双括号包围
4)evaljs()
此方法可以执行JavaScript代码并返回最后一条JavaScript语句的返回结果
5)runjs()
此方法可以执行JavaScript代码,和evaljs()功能类似,但是更偏向于执行某些动作或者声明某些方法
6)autoload()
此方法可以设置每个网页访问时自动加载的对象
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
ok, reason = splash:autoload{source_or_url, source=nil, url=nil} source_or_url:Javascript代码或者Javascript库链接 source: Javascript代码 url: Javascript库链接
7)call_later()
此方法可以通过设置定时任务和延迟时间来实现任务延时执行,并且可以在执行前通过cancel()方法重新执行定时任务
8)http_get()
此方法可以模拟HTTP的GET请求
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
response = splash:http_get{url, headers=nil, follow_redirects=true} url: 请求URL headers: 可选参数,默认为空,请求头 follow_redirects: 可选参数,表示是否启动自动重定向,默认为true
9)http_post()
此方法可以模拟发送POST请求
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
response = splash:http_post{url, headers=nil, follow_redirects=true,body=uil} url: 请求URL headers: 可选参数,默认为空,请求头 follow_redirects: 可选参数,表示是否启动自动重定向,默认为true body: 可选参数,即表单数据,默认为空
10)set_content()
此方法用来设置页面的内容
11)html()
此方法用来获取网页的源代码
12)png(),jpeg()
此方法用来获取相应格式的网页截图
13)har()
此方法用来获取页面加载过程描述
14)url()
此方法可以获取当前正在访问的URL
15)get_cookies()
此方法可以获取当前页面的Cookies
16)add_cookie()
此方法可以为当前页面添加Cookie
17)clear_cookies()
此方法可以清除所有的Cookies
18)get_viewport_size()
此方法可以获取当前浏览器页面的大小
19)set_viewport_size()
此方法可以设置当前浏览器页面的大小
20)set_viewport_full()
此方法可以设置当前浏览器全屏显示
21)set_user_agent()
此方法可以设置浏览器的User-Agent
22)set_custom_headers()
此方法可以设置请求头
23)select()
此方法可以选中符合条件的第一个节点,如果有多个节点符合条件,则只会返回一个,其参数是css选择器
24)select_all()
此方法可以选中所有符合条件的节点,参数为css选择器
25)mouse_click()
此方法可以模拟鼠标点击操作,传入的参数为坐标值x和y,也可以选中某个节点,然后调用此方法
5.Splash API调用
1)render.html
此接口用于获取JavaScript渲染的页面的HTML代码,接口地址就是Splash的运行地址加此接口名称
2)render.png render.jpeg
此接口用于获取网页截图
3)render.har
此接口用于获取页面加载的HAR数据
4)render.json
此接口保欢乐前面接口的所有功能,返回结果是JSON格式
5)execute
此接口是最强大的接口,用此接口可以实现与Lua脚本的对接