调用 chromedp 进行网页渲染,对渲染内容进行截图/保留
package main
import (
"fmt"
"github.com/LubyRuffy/chrome_proxy/models"
"github.com/LubyRuffy/chrome_proxy/screenshot"
"github.com/LubyRuffy/chrome_proxy/utils"
"os"
)
func main() {
url := "https://fofa.info"
// take screenshot
screenshotOutput, err := screenshot.ScreenshotURL(&models.ChromeParam{
Sleep: 5,
Timeout: 30,
ChromeActionInput: models.ChromeActionInput{
URL: url,
},
})
if err != nil {
fmt.Printf("fail to take screenshot for %s, %s", url, err.Error())
return
}
fmt.Printf("screenshot for url: %s, title: %s", screenshotOutput.Location, screenshotOutput.Title)
// save screenshot result to png file
fn, err := utils.WriteTempFile(".png", func(f *os.File) error {
_, err = f.Write(screenshotOutput.Data)
return err
})
if err != nil {
fmt.Printf("fail to save png file: %s", err.Error())
return
}
fmt.Printf("save picture to: %s", fn)
}
用chrome的docker环境做最简单的截图服务器。
docker build --tag lubyruffy/chrome_proxy:latest .
运行
docker run --rm -it -p5558:5558 lubyruffy/chrome_proxy:latest
保存镜像
docker save -o chrome_proxy.tar lubyruffy/chrome_proxy:latest
截图
curl -d '{"url":"http://www.baidu.com", "sleep":1, "timeout":10}' http://127.0.0.1:5558/screenshot
{
"code": 200,
"url": "http://www.baidu.com",
"data": "iVB...base64..."
}
附带url的截图
curl -d '{"url":"http://www.baidu.com", "sleep":1, "timeout":10, "add_url": true}' http://127.0.0.1:5558/screenshot
{
"code": 200,
"url": "http://www.baidu.com",
"data": "/9j/4...base64..."
}
渲染dom
curl -d '{"url":"http://www.baidu.com", "sleep":1, "timeout":10}' http://127.0.0.1:5558/renderDom
{
"code": 200,
"url": "https://www.baidu.com",
"data": "<html>...</html>",
"title": "百度一下,你就知道",
"location": "https://www.baidu.com/"
}
使用自定义代理 & UA
curl -d '{"url":"http://www.baidu.com", "sleep":1, "timeout":10, "proxy":"socks5://127.0.0.1:7890", "user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44"}' http://127.0.0.1:5558/screenshot
{
"code": 200,
"message": "",
"url": "http://www.baidu.com",
"data": "iVBOR..."
}