一款标星 3.9k+ 的牛逼浏览器驱动框架

2019年10月29日 342点热度 0人点赞 0条评论

【公众号回复 “1024”,免费领取程序员赚钱实操经验】

图片

写过爬虫或者做过一些浏览器自动化测试工作的同学,一定对 Selenium 或者 PhantomJS 不陌生,他们都可以通过代码直接驱动浏览器去完成我们想要的工作,就像我们真正的在操作一样,非常的方便。

但是上述两个工具一般安装比较复杂,同时不是跨平台的,所以一般你在自己电脑配置好了,要发布到线上的时候,还需要再安装一遍,你完全不知道你会碰到什么样的坑。一定困恼了很多的同学吧?

今天要推荐的工具 Chromedp,同样可以驱动浏览器去完成我们想要的工作,但是他完全没有外部的依赖,同时该工具采用 Go 语言开发,解决了困恼我们的跨平台的问题。它使用起来非常的快速和简洁,我们来看几个例子。

点击事件

// Command click is a chromedp example demonstrating how to use a selector to
// click on an element.
package main

import (
"context"
"log"
"time"

"github.com/chromedp/chromedp"
)

func main() {
// create chrome instance
ctx, cancel := chromedp.NewContext(
context.Background(),
chromedp.WithLogf(log.Printf),
)
defer cancel()

// create a timeout
ctx, cancel = context.WithTimeout(ctx, 15*time.Second)
defer cancel()

// navigate to a page, wait for an element, click
var example string
err := chromedp.Run(ctx,
chromedp.Navigate(`https://golang.org/pkg/time/`),
// wait for footer element is visible (ie, page is loaded)
chromedp.WaitVisible(`body > footer`),
// find and click "Expand All" link
chromedp.Click(`#pkg-examples > div`, chromedp.NodeVisible),
// retrieve the value of the textarea
chromedp.Value(`#example_After .play .input textarea`, &example),
)
if err != nil {
log.Fatal(err)
}
log.Printf("Go's time.After example:\n%s", example)
}

上面是一个点击并获取点击区域值的代码,可以看出除了一些初始化的代码,本身操作浏览器工作的代码非常的简洁。

模拟手机操作

看了示例代码,没想到还可以模拟手机 IPhone 7 操作。通过 chromedp.Emulate(device.IPhone7landscape) 就可以模拟 IPhone7 了,代码如下:

// Command emulate is a chromedp example demonstrating how to emulate a
// specific device.
package main

import (
"context"
"io/ioutil"
"log"

"github.com/chromedp/chromedp"
"github.com/chromedp/chromedp/device"
)

func main() {
// create context
ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()

// run
var b1, b2 []byte
if err := chromedp.Run(ctx,
// emulate iPhone 7 landscape
chromedp.Emulate(device.IPhone7landscape),
chromedp.Navigate(`https://www.whatsmyua.info/`),
chromedp.CaptureScreenshot(&b1),

// reset
chromedp.Emulate(device.Reset),

// set really large viewport
chromedp.EmulateViewport(1920, 2000),
chromedp.Navigate(`https://www.whatsmyua.info/?a`),
chromedp.CaptureScreenshot(&b2),
); err != nil {
log.Fatal(err)
}

if err := ioutil.WriteFile("screenshot1.png", b1, 0644); err != nil {
log.Fatal(err)
}
if err := ioutil.WriteFile("screenshot2.png", b2, 0644); err != nil {
log.Fatal(err)
}
}

通过访问  https://www.whatsmyua.info/ 可以知道具体是通过什么设备访问的。

图片

下一个爬虫相关的工作,我就打算用这个工具了。

项目地址:https://github.com/chromedp/chromedp

示例地址:https://github.com/chromedp/examples

今天的推荐不知道大家喜欢吗?如果你喜欢,请在文章底部留言和点赞,以表示对我的支持,你们的留言、点赞和转发关注是我持续更新的动力哦!

「GitHub精选」开始接受大家投稿啦

「GitHub精选」,每晚10:24准时为您推送

图片

10420一款标星 3.9k+ 的牛逼浏览器驱动框架

root

这个人很懒,什么都没留下

文章评论