mirror of
https://github.com/vimagick/dockerfiles
synced 2024-06-28 09:41:20 +00:00
151 lines
3.5 KiB
Markdown
151 lines
3.5 KiB
Markdown
splash
|
||
======
|
||
|
||
[Splash][1] is a javascript rendering service with an HTTP API. It's a
|
||
lightweight browser with an HTTP API, implemented in Python using Twisted and
|
||
QT.
|
||
|
||
It's fast, lightweight and state-less which makes it easy to distribute.
|
||
|
||
## docker-compose.yml
|
||
|
||
```yaml
|
||
version: '3.8'
|
||
|
||
services:
|
||
|
||
splash:
|
||
image: scrapinghub/splash:3.5.0
|
||
command: --maxrss 2048 --max-timeout 300 --disable-lua-sandbox --verbosity 1
|
||
ports:
|
||
- "8050:8050"
|
||
volumes:
|
||
- ./data/filters:/etc/splash/filters
|
||
- ./data/js-profiles:/etc/splash/js-profiles
|
||
- ./data/lua_modules:/etc/splash/lua_modules
|
||
- ./data/proxy-profiles:/etc/splash/proxy-profiles
|
||
restart: unless-stopped
|
||
```
|
||
|
||
## server
|
||
|
||
File: data/filters/default.txt
|
||
|
||
```
|
||
||fonts.googleapis.com^
|
||
||ajax.googleapis.com^
|
||
```
|
||
|
||
```bash
|
||
$ cd ~/fig/splash
|
||
$ tree
|
||
.
|
||
├── docker-compose.yml
|
||
└── data
|
||
├── filters
|
||
│ ├── easylist.txt
|
||
│ └── default.txt
|
||
├── js-profiles
|
||
├── lua_modules
|
||
│ └── utils.lua
|
||
└── proxy-profiles
|
||
$ docker-compose up -d
|
||
$ docker-compose ps
|
||
Name Command State Ports
|
||
----------------------------------------------------------------------------------
|
||
splash_splash_1 python3 /app/bin/splash -- ... Up 8050/tcp
|
||
```
|
||
|
||
> If `default.txt` file is present in `--filters-path` folder it is used by default
|
||
> when filters argument is not specified. Pass `filters=none` if you don’t want
|
||
> default filters to be applied.
|
||
|
||
## client
|
||
|
||
```lua
|
||
-- http-proxy.lua
|
||
|
||
function main(splash, args)
|
||
splash:on_request(function(request)
|
||
request:set_proxy{
|
||
host = "61.91.251.235",
|
||
port = 8080,
|
||
}
|
||
end)
|
||
assert(splash:go("http://ifconfig.co"))
|
||
assert(splash:wait(0.5))
|
||
return splash:png()
|
||
end
|
||
```
|
||
|
||
```lua
|
||
-- baidu-search.lua
|
||
|
||
function main(splash)
|
||
splash:go('https://www.baidu.com/')
|
||
splash:wait(1)
|
||
splash:select('#kw'):send_text('google')
|
||
splash:wait(1)
|
||
splash:select('#su'):click()
|
||
splash:wait(1)
|
||
splash:evaljs([[
|
||
$('#content_left').css('padding', '0');
|
||
]])
|
||
splash:set_viewport_full()
|
||
splash:wait(1)
|
||
return splash:select('#content_left'):png()
|
||
end
|
||
```
|
||
|
||
```lua
|
||
-- youtube-logo.lua
|
||
|
||
function main(splash)
|
||
splash:go('https://www.youtube.com/')
|
||
splash:wait(0.5)
|
||
local logo = splash:select('.logo')
|
||
return logo:png()
|
||
end
|
||
```
|
||
|
||
```lua
|
||
-- crop.lua
|
||
|
||
function main(splash)
|
||
local url = splash.args.url
|
||
local css1 = splash.args.css1
|
||
local css2 = splash.args.css2
|
||
assert(splash:go(url))
|
||
splash:set_viewport_full()
|
||
local box1 = splash:select(css1):bounds()
|
||
local box2 = splash:select(css2):bounds()
|
||
return splash:png{
|
||
region={
|
||
math.min(box1.left, box2.left),
|
||
math.min(box1.top, box2.top),
|
||
math.max(box1.right, box2.right),
|
||
math.max(box1.bottom, box2.bottom),
|
||
}
|
||
}
|
||
end
|
||
```
|
||
|
||
View more [examples][2].
|
||
|
||
```bash
|
||
# whole page
|
||
$ http http://server:8050/render.png url==https://www.youtube.com/ > youtube.png
|
||
|
||
# only logo
|
||
$ http http://server:8050/execute lua_source=@youtube-logo.lua > youtube-logo.png
|
||
|
||
# only form
|
||
$ http http://server:8050/execute lua_source=@crop.lua \
|
||
url=https://www.facebook.com/ \
|
||
css1='#u_0_1' \
|
||
css2='#u_0_b' > facebook-form.png
|
||
```
|
||
|
||
[1]: http://splash.readthedocs.org/en/latest/
|
||
[2]: https://github.com/scrapinghub/splash/tree/master/splash/examples
|