首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Splash截取某个URL的屏幕快照

问使用Splash截取某个URL的屏幕快照
EN

Stack Overflow用户
提问于 2017-05-23 05:50:08
回答 1查看 609关注 0票数 0

我正在尝试使用Scrapy Splash的render.png端点来截取以下网址的屏幕截图:

代码语言:javascript
复制
https://www.laithwaites.co.uk/product/Kilikanoon-Baroota-Shiraz-2014/66877

在实践中,我使用python-requests发出请求,然而,即使当我在浏览器中进行测试时,它也会将cpu使用率推到100%以上(通过“top”测量),挂起很长一段时间,最终迫使Splash崩溃。我猜它快没内存了。

我尝试将maxrss从500增加到1500,但这没有帮助。我还尝试调整了render.png端点的等待/超时参数,但没有改变结果。

如何使用Splash截取此页面的屏幕截图?

EN

回答 1

Stack Overflow用户

发布于 2017-07-01 09:42:12

这似乎是JS引擎的一些问题。如果关闭JS,至少可以截图:

代码语言:javascript
复制
import requests

script = """
function main(splash)
  local url = splash.args.url
  splash.js_enabled = false
  assert(splash:go(url))
  return splash:png()
end
"""

resp = requests.post('http://localhost:8050/execute', json={
    'lua_source': script,
    'url': '<url>',
})

如果您启用了详细日志记录(docker run -it -p8050:8050 scrapinghub/splash -v3),您可以看到在从cloudfront下载一些fetch.js文件后Splash挂起。它可能包含一些使Splash挂起的代码。您可以尝试仅过滤掉此文件(中止其下载),而不是禁用JS:

代码语言:javascript
复制
function main(splash)
  local url = splash.args.url
  splash:on_request(function (req) 
    if req.url:find('fetch.js') ~= nil then
      req.abort()
    end
  end)
  assert(splash:go(url))
  return splash:png()
end

上面的脚本适用于我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44122662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档