golang是近几年发展非常迅猛的一款服务器端的语言,其生态也日益丰富。对于使用golang实现网页截图这个需求,笔者在经过一番调研之后发现大家有推荐Selenium方案,但是这一方案问题较多:
- 需要安装Selenium或是PhantomJS
- PhantomJS已经停止维护了
- Selenium的运行需要安装chromedriver
- chromedriver对chrome的版本有一定要求
还有推荐headless chrome方案的,但是这一方案也需要自行在服务器端安装一款浏览器,对服务器的压力比较大,并发性能也不好,所以最后笔者直接选用了一款第三方API的截图服务。
该服务有如下特点:
- 支持多线路
- 支持登录截图
- 支持UA变换
- 支持Cookie注入 实现登录截图
- 支持自定义宽高
- 支持网页滚动截图
- 支持设定截图前的延迟时间
使用方式也很简单,我们打开它的首页 https://www.screenshotmaster.com/ 注册一个账号,然后你会在用户中心获取到一个唯一的Token,保存好这个Token 不要泄漏!
下面来看看它支持的参数:
您可以前往 API文档 页面查看更多的参数。
使用golang调用截屏大师的接口获取截图:
package main import ( "fmt" "io" "io/ioutil" "net/http" url2 "net/url" "os" ) func main() { // 参数 token := "YOUR_API_TOKEN" url := url2.QueryEscape("https://www.baidu.com") width := 1280 height := 800 full_page := 1 // 构造URL query := "https://www.screenshotmaster.com/api/v1/screenshot" query += fmt.Sprintf("", token, url, width, height, full_page) // 调用API resp, err := http.Get(query) if err != nil { panic(err) } defer resp.Body.Close() // 检查是否调用成功 if resp.StatusCode != 200 { errorBody, _ := ioutil.ReadAll(resp.Body) panic(fmt.Errorf("error while calling api %s", errorBody)) } // 保存截图 file, err := os.Create("./screenshot.png") if err != nil { panic(err) } defer file.Close() _, err = io.Copy(file, resp.Body) if err != nil { panic(err) } }
go实现网页截图,go实现截图
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。