Splash清除input现有值问题处理

2019-09-27  本文已影响0人  佑岷

需要采集court.gov.cn网站公布的破产信息,网站需要翻页,原本研发的模板爬虫引擎不支持POST方式配置化抓取,因此决定直接采用splash翻页。

court.gov.cn

这边有个翻页按钮:必须focus到跳转页才会显示:


image.png

Focus方法:splash:select(sel):focus()

function focus(sel)
    splash:select(sel):focus()
  end

当需要为跳转页设值时发现用splash:send_text()方法会在原有值前追加,并不会覆盖。因此需要嵌入JS脚本处理:

splash:evaljs('document.getElementById("rel").value = "2017-01-01";document.getElementById("kkpager_btn_go_input").value = "12";')

代码可知我们还限定了抓取时间范围。
完整代码:

function main(splash, args)
  function focus(sel)
    splash:select(sel):focus()
  end
  assert(splash:go(args.url))
  assert(splash:wait(0.5))
  splash:evaljs('document.getElementById("rel").value = "2017-01-01";document.getElementById("kkpager_btn_go_input").value = "12";')
  focus('input[id="kkpager_btn_go_input"]')
  splash:evaljs('document.querySelector("#kkpager_btn_go").click()')
  assert(splash:wait(2))
  return {
    html = splash:html(),
    png = splash:png(),
    har = splash:har(),
  }
end

有一点需要注意:若用连续使用splash:send_text()时,必须要先focus,不然text值会同步到各个input框。

上一篇 下一篇

猜你喜欢

热点阅读