mirror of
https://github.com/vimagick/dockerfiles.git
synced 2024-12-23 01:39:27 +02: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
|