我尝试使用Scrapy Splash的render.png
端点截取以下网址的屏幕截图:
https://www.laithwaites.co.uk/product/Kilikanoon-Baroota-Shiraz-2014/66877
在实践中,我使用python-requests
发出请求,但是,即使我在浏览器中执行此操作进行测试,也会将cpu使用率推高到100%以上(以" top"来衡量),挂了很长时间然后最终迫使Splash崩溃。我猜它的内存不足。
我尝试将maxrss
从500增加到1500,但这没有用。我还尝试调整render.png
端点的等待/超时参数,但没有改变结果。
如何使用Splash获取此页面的屏幕截图?
答案 0 :(得分:0)
似乎JS引擎存在一些问题。如果关闭JS,你至少可以获得截图:
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:
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
上面的脚本对我有用。