JS 渲染服务 Splash 的使用

splash 是一个开源模拟浏览器的lua脚本库,我们可以使用它,来模拟浏览器

 

入门
# 这 main 是路口函数 所有的东西 都再这里开始
function main(splash,args)
  # 关闭图片
 splash.images_enabled = false
  # 我们使用 local 声明变量
 local example_urls = {'http://www.baidu.com','http://www.qq.com'}
   
 local urls = args.urls or example_urls
  # 定义一个对象
 local results = {}
  # for 循环,记得加 ipairs 以及 do
 for index,url in ipairs(urls) do
      # 如果成功了返回 成功,如果失败了返回失败以及原因
   local ok, reason = splash:go(url)
      # 这里是做了一个判断 注意 then
   if ok then
              # 这里是截屏
     results[url] = splash:png()
     end
   end
 return results
 end

 

images_enabled

设置图片是否加载,默认情况下是加载的。禁用该属性后,可以节省网络流量并提高网页加载速度

function main(splash, args) 
   splash.images_enabled = false
   splash:go('https://www.baidu.com')
   
  # 注意返回的对象用 = 号
   return {
       html=splash:html()
  }
end
plugins_enabled

可以控制浏览器的插件(比如flash)是否开启 默认不开启

splash.plugins_enabled = true/false
scroll_position

控制页面上下或者左右滚动

function main(splash,args)
 splash:go('http://www.qq.com')
 splash:wait(0.5)
 
 # 这里就是控制了滚动条
 splash.scroll_position={
   x=100,y=1000
}
 return {
   png = splash:png()
}
 end
js_enabled

是否开启 JavaScript 脚本,默认为 true

function main(splash,args)

 # 这里就是关闭了 JavaScript 脚本
 splash.js_enabled = false
 splash:go('http://www.qq.com')
 splash:wait(0.5)
 splash.scroll_position={
   x=100,y=1000
}
 return {
   png = splash:png()
}
 
 end

 

Splash 对象使用

go()

该方法用来请求某个链接,而且它可以模拟 GET 和 POST 请求,同时支持传入请求头、表单等数据

ok, reason = splash:go{
   url, baseurl=nil, headers=nil, http_method="GET", body=nil, formdata=nil
}

返回结果是结果 ok 和原因 reason如果 ok 为空,代表网页加载出现了错误,此时 reason 变量中包含了 错误的原因

模拟登录
function main(splash,args)
 splash:go{'http://74.120.174.165:8888/login/',http_method="POST"
,body="email=112015@qq.com&password=lei"}
 
 return {splash:html(),splash:png()}
 end

 

wait() 控制页面等待时间
splash:wait{
   time, cancel_on_redirect=false, cancel_on_error=true
}
jsfunc()

主要用于把 JavaScript 函数,转换为 lua 函数

相当于执行原生的 JavaScript

直接调用 JavaScript 定义的方法,这相当于实现了 JavaScript 方法到 Lua 脚本的转化

function main(splash, args)
 splash:go('http://www.qq.com')
 
# 这里就是使用了原生的 JavaScript
 local scroll = splash:jsfunc('window.scrollTo')
 scroll(0,1000)
 return splash:png()
 end

如果想要定义 JavaScript 函数,那么需要用两个中括号

function main(splash, args)
 splash:go('http://www.qq.com')
   
# 使用两个中括号定义函数  
# 这里就定义了一个 test 函数
 local test = splash:jsfunc([[
   function (){
   return 'aaaaaaaa'
 }
   ]])
 return test()
 end

evaljs()

主要用于再页面上执行 JavaScript 代码并返回最后一条 JavaScript 语句的返回结果

runjs()

更偏向于执行某些动作或者声明某些方法

这两个可以配合使用

function main(splash, args)
 splash:go('http://www.qq.com')
 
# 这里声明了一个函数
 splash:runjs('foo = function(){return 1}')
   
# 这里调用了一个函数
 local res = splash:evaljs('foo()')
 return res
 end
autoload()

这个主要用于连接 JavaScript 库,或者是载入 JavaScript 代码

splash:autoload 要放在 splash:go 的上面

function main(splash, args)
 
 splash:autoload([[
   function test(){
   return document.title
 }
   ]])
 
 splash:go('http://www.qq.com')
 return splash:evaljs('test()')
 
 end

或者加载 JavaScript 库

function main(splash, args)
  # 先使用 autoload 再使用 go
splash:autoload('https://code.jquery.com/jquery-2.1.3.min.js')
splash:go('http://www.taobao.com')
local version = splash:evaljs('$.fn.jquery')
return 'version'..version
end
html()

获取网页的源代码

function main(splash, args)
   splash:go('http://www.baidu.com')
   return splash:html()
end
png()

获取网页的 png 截图

function main(splash, args)
   splash:go('http://www.baidu.com')
   return splash:png()
end
har()

获取网站加载过程的统计图

function main(splash, args)
   splash:go('http://www.baidu.com')
   return splash:har()
end
url()

获取当前正在访问的 URL

function main(splash, args)
   splash:go('http://www.baidu.com')
   return splash:url()
end
get_cookies()

获取当前页面的 cookies

function main(splash, args)
   splash:go('http://www.baidu.com')
   return splash:get_cookies()
end
add_cookie()

给当前页面添加 cookie

function main(splash) 
 splash:add_cookie{
   "sessionid",
   "123456abcdef",
   "/",
   domain="http://bjsxt.com"
} splash:go("http://bjsxt.com/")
 
 return {
   splash:html(),splash:get_cookies()
}
end
clear_cookies()

清除所有的 cookies

function main(splash,args)
 splash:go('http://www.qq.com')
 splash:clear_cookies()
 end
set_user_agent()

设置 user_agent

function main(splash,args)
 splash:set_user_agent('splash')
 splash:go('http://www.qq.com')
end

 

set_custom_headers()

设置请求头

function main(splash) 
   splash:set_custom_headers({
          ["User-Agent"] = "Splash", ["Site"] = "Splash",
      })
   splash:go("http://douban.com") return splash:html()
end
select()

选择节点 选择符合条件的第一个节点,里面是 css 选择器

function main(spalsh)
   splash:go('http://www.baidu.com')
   
   input = splash:select('#kw')
   spalsh:wait(3)
end
send_text()

填写文本

function main(splash)
   splash:go('http://www.baidu.com')
   input = splash:select('#kw')
   
  # 这里就是填写文本了
   input:send_text('splash')
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()
en
最新评论
暂无评论
登录后评论