splash对象属性
args
mai()方法的第一个参数:splash对象(它的属性和方法控制加载过程)
args:获取加载时配置的参数,如URL,GET请求:可获取GET请求参数,POST请求:获取表单提交的数据
function main(splash, args)
local url = args.url
return url
end
与下面等价
function main(splash)
local url = splash.args.url
return url
end
js_enabled
JavaScript执行开关,默认为true
禁用JS:
function main (splash,args)
splash:go("http://www.baidu.com")
splash.js_enabled = false
local title = splash:evaljs("document.title")
return {title=title}
end
resource_timeout
设置加载的超时时间(秒),0/nil表示不检测超时
image_enabled
设置图片是否加载,默认true加载,禁用会影响JavaScript的渲染(影响DOM节点的位置),Splash使用缓存,一开始加载图片,后面禁用仍会出现图片,重启Splash即可
plugins_enabled
浏览器插件是否开启,默认false
scroll_position
控制页面上下/左右滚动(x = 100(左右滚动),y = 100(上下滚动))
向下滚动400像素:
function main (splash,args)
assert(splash:go("http://www.taobao.com"))
splash.scroll_position = {y = 400}
return {ping = splash:png()}
end
splash对象的方法
go()
请求某个链接,可传入请求头、表单等数据
ok,reason = splash:go{url, baseurl=nil, headers=nil, http_method="GET", body=nil , formdata=nil}
url:请求的url
baseurl:可选参数,默认为空,表示资源和加载相对路径
headers:可选参数,默认为空,表示请求头
http_method:可选参数,默认为GET
body:可选参数,默认为空,POST的时候的表单数据,使用的content-type为application/json
formdata:可选参数,默认为空,POST的时候的表单数据,使用的content-type为application/x-www-form-urlencoded
wait()
控制页面等待时间
ok, reason = splash:wait{time, cancel_on_redirect=false, cancel_on_error=true}
time:等待的时间
cancel_on_error:可选参数,默认false,表示发生错误加载,就停止等待
cancel_on_redirect:可选参数,默认false,表示发生重定向就停止等待,并返回重定向结果
evaljs()
执行JavaScript代码后返回最后一条JavaScript语句返回的结果
result = splash:evaljs(js)
runjs()
声明JavaScript定义的语句块,通过evaljs()调用
function main(splash, args)
splash:go(args.url)
splash:runjs("foo = function(){return 'hello'}")
local result = splash:evaljs("foo()")
return result
end
autoload()
设置每个页面访问时自动加载的对象,可以是JavaScript代码或库,但是不执行操作,执行调用evaljs()
ok,reason = splash:autoload{source_or_url}
source_or_url:js代码或js库链接
source:js代码
url:js库链接
call_later()
设置定时任务和延时执行,如下在go访问后使用wait(3.0)等待3秒才返回所有截图,期间设置0.2秒获取截图,中间等待1秒,1.2秒的时候再次获取截图,最后3秒后返回所有截图
function main(splash, args)
local snapshots = {}
local timer = splash:call_later(function()
snapshots["a"]=splash:png()
splash:wait(1)
snapshots["b"]=splash:png()
end,0.2)
splash:go("https://www.taobao.com")
splash:wait(3.0)
return snapshots
end
http_get()
模拟发送http的get请求
response = splash:http_get(url,headers=nil,follow_redirects=true)
function main(splash, args)
local treat = require("treat")
local response = splash:http_get(args.url)
return {
html = treat.as_string(response.body),
url = response.url,
status = response.status
}
end
url:请求的url
headers:可选参数,默认为空,请求头
follow_redirects:可选参数,表示是否启动自动重定向,默认true
http_post()
发送post请求,需要body参数
response = splash:http_post{url, headers =「1il, follow_redirects=true, body=nil}
url:请求的url
headers:可选参数,默认为空,请求头
follow_redirects:可选参数,表示是否启动自动重定向,默认true
body:可选参数,即表单参数,默认为空
function main(splash, args)
local treat = require("treat")
local json = require("json")
local response = splash:http_post{args.url,
body=json.encode({name="aha"}),
headers={["content-type"]="application/json"}
}
return {
html = treat.as_string(response.body),
url = response.url,
status = response.status
}
end
set_content()
设置页面内容
function main(splash)
assert(splash:set_content("<html><body><hl>hello</hl></body></html>"))
return splash: png ()
end
html()
返回获取的页面源码信息
function main(splash, args)
splash:go("https://httpbin.org/get")
return splash: html()
end
png()
返回PNG格式的截图
png = splash:png()
function main(splash, args)
splash:go("https:/taobao.com")
return splash: png()
end
jpeg()
返回JPEG格式的截图
jpeg = splash:jpeg()
function main(splash, args)
splash:go("https:/taobao.com")
return splash: jpeg()
end
har()
获取页面加载过程描述
function main(splash, args)
splash:go("https:/taobao.com")
return splash: har()
end
url()
获取当前URL
function main(splash, args)
splash:go("https:/taobao.com")
return splash: url()
end
get_cookies()
获取当前访问链接的cookies
function main(splash, args)
splash:go("https:/taobao.com")
return splash: get_cookies()
end
add_cookies()
添加cookies
cookies = splash:add_cookie{name, value, path=nil, domain=nil, expires=nil, httpOnly=nil, secure=nil}
function main(splash)
splash:add_cookie{"sessionid","23746Sghgfsd ","/", domain="http://example.com"}
splash:go("http://example.com/")
return splash:html()
end
clear_cookies()
清除cookies
function main(splash, args)
splash:go("https:/taobao.com")
splash:clear_cookies()
return splash: get_cookies()
end
get_viewport_size()
获取当前浏览器的大小
function main(splash, args)
splash:go("https:/taobao.com")
return splash:get_viewport_size()
end
set_viewport_size()
设置当前浏览器的大小
function main(splash, args)
splash:set_viewport_size(1200,800)
assert(splash:go("https:/taobao.com"))
return splash:png()
end
set_viewport_full()
设置浏览器全屏显示
function main(splash, args)
splash:set_viewport_full()
assert(splash:go("https:/taobao.com"))
return splash:png()
end
set_user_agent()
设置浏览器的user_agent
function main(splash, args)
splash:set_user_agent('Splash')
assert(splash:go("http://httpbin.org/get"))
return splash:html()
end
set_custom_headers()
设置请求头信息
function main(splash, args)
splash:set_custom_headers({
["User-Agent"] = "Splash",
["Sitle"] = "Splash",
})
assert(splash:go("http://httpbin.org/get"))
return splash:html()
end
select()
返回选中符合条件的第一个节点,参数是CSS选择器
function main(splash, args)
splash:go("https://www.baidu.com/")
input = splash:select("#kw")
input:send_text("Splash")
splash:wait(3)
return splash:png()
end
select_all()
返回选中符合条件的所有节点,参数是CSS选择器
function main(splash)
local treat = require('treat')
assert(splash:go("http://quotes.toscrape.com"))
assert(splash:wait(0.5))
local texts = splash:select_all('.quote .text')
local results = {}
for index,text in ipairs(texts) do
results[index] = text.node.innerHTML
end
return treat.as_array(results)
end
mouse_click()
模拟鼠标点击事件
function main(splash)
splash:go("https://www.baidu.com")
input = splash:select("#kw")
input:send_text('Splash')
submit = splash:select('#su')
submit:mouse_click()
splash:wait(3)
return splash:png()
end