为什么Splash无法呈现此网页?

问题描述

我对Splash还是很陌生,因此我能够在Ubuntu 18上(通过Splash / Docker)在Splash上​​安装Splash,这为该页面提供了不同的结果: https://www.overstock.com/Home-Garden/Area-Rugs/31446/subcat.html

通常以如下方式呈现:

enter image description here

但是当我尝试在Splash中渲染它时,它会这样渲染:

enter image description here

我尝试将Splash中的用户代理更改为此:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.135 Safari/537.36

因此,这使得Splash脚本如下:

function main(splash,args)
  splash:set_user_agent(
  'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.135 Safari/537.36'
  )
  assert(splash:go(args.url))
  assert(splash:wait(0.5))
  return {
    html = splash:html(),png = splash:png(),har = splash:har(),}
end

尽管有这些添加,它仍然无法呈现页面

如何使Splash呈现此页面

解决方法

似乎overstock.com需要一个ConnectionAccept标头。将其添加到您的请求,它应该可以正常工作。 在Postman上测试,带有和不带有Connection: keep-alive && Accept: */*标头;我得到了相同的错误页面:

enter image description here

添加上面的两个标题后:

enter image description here

因此,您的请求应进行相应的编辑:

function main(splash,args)
  splash:set_custom_headers({
     ["Connection"] = "keep-alive",["Accept"] = "*/*",})
  assert(splash:go(args.url))
  assert(splash:wait(0.5))
  return {
    html = splash:html(),png = splash:png(),har = splash:har(),}
end

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...