Rod 一个为简化自动化和爬虫设计的 devtools driver

2020-07-02 19:12:41 +08:00
 ysmood

项目地址: https://github.com/ysmood/rod

这个库的主要原理就是利用浏览器的 devtools 可编程接口来操控浏览器。日常你可以用它自动化一些重复的页面任务,相比油猴子有更多的高级功能和 golang 强大的生态。工作上可以用它辅助集成化测试减少人力消耗。开发上可以用它简化一些传统爬虫需要费很多时间逆向工程的场景。

根目录的 readme 里有常见的问答,以及和 chromedp,puppeteer 等库的比较。

同类的项目有 chromedp,但是其存在架构设计上的问题且更新缓慢,所以我们开发了 rod,感兴趣的朋友请来试试。欢迎对自动化有兴趣的朋友加入到项目中来,这是我们的聊天室: https://discord.gg/PAaMGJw

因为问的人特别多,我们列了个表格用实际可运行的例子帮助大家直观对比 rod 和 chromedp: https://github.com/go-rod/rod/tree/master/lib/examples/compare-chromedp

下面是一个打印 awesome-go 某一类别项目列表的例子:

package main

import (
    "log"

    "github.com/go-rod/rod"
)

func main() {
    // 启动一个浏览器并新建一个页面
    page := rod.New().Connect().Page("https://github.com/avelino/awesome-go")

    // 获取页面里含有 "Selenium and browser control tools" 标题的下方元素
    // 这里我们将获取到 p 标签下方的列表
    section := page.ElementMatches("p", "Selenium and browser control tools").Next()

    // 在列表里获取全部 li 标签
    projects := section.Elements("li")

    for _, project := range projects {
        // 从 li 标签里获取 a 标签
        link := project.Element("a")
        
        // 打印 a 里的文字,a 的链接,以及 li 里的文字
        log.Println(
            link.Text(),
            link.Property("href"),
            project.Text(),
        )
    }
}
12444 次点击
所在节点    Go 编程语言
66 条回复
abc0707
2020-07-24 22:11:58 +08:00
代码

package main

import (
"fmt"

"github.com/go-rod/bypass"
"github.com/go-rod/rod"
"github.com/go-rod/rod/lib/launcher"
)

func main() {
url := launcher.New().Headless(false).Client()

browser := rod.New().Client(url).Connect()
defer browser.Close()

page := bypass.Page(browser)

page.Navigate("https://www.baidu.com").WaitLoad()

page.ScreenshotFullPage("testresult.png")

fmt.Println("All done, check the screenshot. ✨")
}

报错:
panic: malformed ws or wss URL

goroutine 1 [running]:
github.com/ysmood/kit/pkg/utils.E(0xc000042ca0, 0x1, 0x1, 0xe53e98, 0x0, 0x0)
D:/Program Files/Gopath/src/github.com/ysmood/kit/pkg/utils/utils.go:33 +0xb2
github.com/go-rod/rod.(*Browser).Connect(0xc00007c880, 0xc0003a26c0)
D:/Program Files/Gopath/src/github.com/go-rod/rod/sugar.go:18 +0xa4
main.main()
c:/Users/zhaob/Desktop/qingdao/main.go:14 +0x94
exit status 2
ysmood
2020-07-24 22:41:23 +08:00
@abc0707 你用法的问题应该用 url := launcher.New().Headless(false).Launch() ,麻烦看看文档再用。Client 这个函数是有说明的。

交流群已经在这个帖子里提及了啊,你没看到吗?本页面内搜索 聊天室
ysmood
2020-07-24 22:42:52 +08:00
@abc0707 不要再直接贴代码了,有问题去群里问,也可以去开 issue,v2ex 贴代码太难以阅读了
abc0707
2020-07-24 22:43:06 +08:00
好的 谢谢
fengjianxinghun
2020-07-30 13:15:41 +08:00
这东西不错,回头试试。
shuirong1997
2023-05-26 15:39:58 +08:00
お問い合わせ内容お問い合わせ内容お問い合わせ内容お問い合わせ内容お問い合わせ内容お問い合わせ内容

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/686655

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX