splash对象的属性和方法

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()

请求某个链接,可传入请求头、表单等数据

扫描二维码关注公众号,回复: 7107681 查看本文章
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

猜你喜欢

转载自www.cnblogs.com/einsam/p/11416072.html
今日推荐