一 点睛
main()方法的第一个参数是splash,这个对象非常重要,它类似于Selenium中的WebDriver对象,我们可以调用它的一些属性和方法来控制加载过程。
二 agrs
1 点睛
该属性可以获取加载时配置的参数,比如URL,如果为GET请求,它还可以获取GET请求参数;如果为POST请求,它可以获取表单提交的数据。Splash也支持使用第二个参数直接作为args。
2 代码
function main(splash, args)
local url = args.url
return {url=url}
end
或者
function main(splash, args)
local url = splash.args.url
return {url=url}
end
3 结果
三 js_enabled
1 点睛
这个属性是Splash的JavaScript执行开关,可以将其配置为true或false来控制是否执行JavaScript代码,默认为true。例如,这里禁止执行JavaScript代码如下。
2 代码
function main(splash, args)
splash:go("https://www.baidu.com")
splash.js_enabled = false
local title = splash:evaljs("document.title")
return {title=title}
end
3 结果
{
"error": 400,
"description": "Error happened while executing Lua script",
"info": {
"error": "unknown JS error: None",
"message": "[string \"function main(splash, args)\r...\"]:4: unknown JS error: None",
"source": "[string \"function main(splash, args)\r...\"]",
"js_error_message": null,
"splash_method": "evaljs",
"type": "JS_ERROR",
"line_number": 4
},
"type": "ScriptError"
}
4 说明
调用了evaljs()方法执行JavaScript代码,此时运行结果就会抛出异常。
不过一般来说,不用设置此属性,默认开启即可。
四 resource_timeout
1 点睛
此属性可以设置加载的超时时间,单位是秒。如果设置为0或nil(类似Python中的None),代表不检测超时。
2 代码
function main(splash)
splash.resource_timeout = 0.1
assert(splash:go('https://www.taobao.com'))
return splash:png()
end
3 结果
{
"error": 400,
"description": "Error happened while executing Lua script",
"info": {
"error": "network5",
"message": "Lua error: [string \"function main(splash)\r...\"]:3: network5",
"source": "[string \"function main(splash)\r...\"]",
"line_number": 3,
"type": "LUA_ERROR"
},
"type": "ScriptError"
}
4 说明
这里将超时时间设置为0.1秒。如果在0.1秒之内没有得到响应,就会抛出异常。此属性适合在网页加载速度较慢的情况下设置。如果超过了某个时间无响应,则直接抛出异常并忽略即可。
五 images_enabled
1 点睛
此属性可以设置图片是否加载,默认情况下是加载的。禁用该属性后,可以节省网络流量并提高网页加载速度。但是需要注意的是,禁用图片加载可能会影响JavaScript渲染。因为禁用图片之后,它的外层DOM节点的高度会受影响,进而影响DOM节点的位置。因此,如果JavaScript对图片节点有操作的话,其执行就会受到影响。
另外值得注意的是,Splash使用了缓存。如果一开始加载出来了网页图片,然后禁用了图片加载,再重新加载页面,之前加载好的图片可能还会显示出来,这时直接重启Splash即可。
2 代码
function main(splash, args)
splash.images_enabled = false
assert(splash:go('https://www.jd.com'))
return {png=splash:png()}
end
3 说明
这样返回的页面截图就不会带有任何图片,加载速度也会快很多。
4 结果
六 plugins_enabled
1 点睛
此属性可以控制浏览器插件(如Flash插件)是否开启。默认情况下,此属性是false,表示不开启。可以使用如下代码控制其开启和关闭。
2 示例
splash.plugins_enabled = true/false
七 scroll_position
1 点睛
通过设置此属性,我们可以控制页面上下或左右滚动。这是一个比较常用的属性。
2 代码
function main(splash, args)
assert(splash:go('https://www.taobao.com'))
splash.scroll_position = {y=400}
return {png=splash:png()}
end
3 结果
4 说明
如果要让页面左右滚动,可以传入x参数,代码如下:
splash.scroll_position = {x=100, y=200}