1
2
mirror of https://github.com/vimagick/dockerfiles synced 2024-06-28 17:51:24 +00:00
dockerfiles/splash/README.md
2019-02-21 16:02:31 +08:00

141 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
splash:
image: scrapinghub/splash:3.3
command: --maxrss 4096 --max-timeout 300
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
mem_limit: 4608M
restart: always
```
## server
```
$ cd ~/fig/splash
$ tree
.
├── docker-compose.yml
└── data
├── filters
│   ├── easylist.txt
│   └── default.txt
├── js-profiles
└── proxy-profiles
$ cat data/filters/default.txt
||fonts.googleapis.com^
||ajax.googleapis.com^
$ docker-compose up -d
```
> 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 dont 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