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

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

    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
    
  • 相关阅读:
    377 TODOMVC:准备工作,配置 vue,列表渲染,添加任务,删除任务,编辑任务 ,Footer 的显示与隐藏
    376 vue指令:v-model (常用),v-text 和 v-html,v-bind (常用),操作样式,v-on,v-for,v-pre,v-once,v-cloak
    375 vue数据双向绑定演示:一个 input + v-model,Object.defineProperty,数据双向绑定的原理简单实现
    374 vue起步
    373 Vue 介绍,框架和库的区别 ,MVC + MVVM
    实现一个vue-router插件
    浅谈react context
    Flutter网络请求与JSON解析
    Vue中组件
    vue数据监听
  • 原文地址:https://www.cnblogs.com/einsam/p/11416072.html
Copyright © 2020-2023  润新知