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(),
        )
    }
}
12440 次点击
所在节点    Go 编程语言
66 条回复
porr
2020-07-02 19:18:36 +08:00
试试看能不能用来批量取消微博收藏。
ysmood
2020-07-02 19:26:32 +08:00
@porr 你可以看下这个例子 https://github.com/go-rod/rod/blob/9295ca9ae9570da05ef5d1fd34059c8f790630ec/examples_test.go#L43-L63

用 launcher.NewUserMode() 来复用你的微博登陆信息,你就可以免登陆直接去操作相关任务了。
0o0O0o0O0o
2020-07-02 19:40:01 +08:00
go 版的 puppeteer ?
ysmood
2020-07-02 19:53:22 +08:00
@0o0O0o0O0o 是的,功能正在接近 puppeteer,甚至在某些方面已经有更多高级功能。
iiusky
2020-07-02 19:56:37 +08:00
可以执行 js 么?模拟点击
ysmood
2020-07-02 19:58:59 +08:00
@iiusky 可以。可以移步 https://github.com/go-rod/rod/tree/master/lib/examples/compare-chromedp

第一个就是点击的例子,eval 的例子也有
tikazyq
2020-07-02 20:05:39 +08:00
不错,试用下,如果可以的话看如何集成到 crawlab
ysmood
2020-07-02 20:16:42 +08:00
@tikazyq 欢迎合作,有任何问题都可以来群里侃侃 https://discord.gg/PAaMGJw
supermoonie
2020-07-02 20:20:04 +08:00
已经用 java 写过一遍了🤪,就一个 websocket 🤪,本来还打算用 c++再写一遍,写了一半放弃了🤪
iiusky
2020-07-02 23:52:02 +08:00
回头试试看,
ysmood
2020-07-03 11:26:40 +08:00
@iiusky 可以看下这个 V2EX 的每日自动签到例子 https://github.com/go-rod/v2ex-clockin
huyinjie
2020-07-03 14:31:36 +08:00
支持
ysmood
2020-07-03 14:51:35 +08:00
@huyinjie 多谢支持~
locoz
2020-07-03 19:23:15 +08:00
有意思,收藏放着
xinyana
2020-07-04 10:27:06 +08:00
作者你好,可以实现 iMacros 的部分自动化功能吗
ysmood
2020-07-04 11:41:36 +08:00
@xinyana 市场上继续 selenium 的工具太多了,老实说我没有用过 iMacros, 稍微看了下他们的说明,见解可能有偏颇望见谅,如果只是 chrome 的话,理论上 rod 功能是要比它更多更可控,关于这点可以参考我们 readme 里的和 selenium 的比较,但缺点是 rod 更底层。社区里有个朋友正在基于 rod 开发类 iMacros 的工具,有兴趣可以去看看 https://github.com/go-rod/wayang
ysmood
2020-07-04 11:42:17 +08:00
更正 继续 为 基于
xinyana
2020-07-05 04:13:19 +08:00
@ysmood 谢谢精心答复,我看好明天研究一下,就是想实现自动批量打印单据,在用一个 web 版 erp 特别不友好,打印麻烦
vus520
2020-07-06 14:23:17 +08:00
用于爬虫业务,可以不渲染图片么
ysmood
2020-07-06 15:18:34 +08:00
@vus520 当然,默认就是不渲染图片。rod 使用的 headless 技术,这个你可以查阅相关文章,非常多。当然 rod 的性能肯定比 scrapy 之类的在理论上就差很多,但 rod 能做很多 scrapy 完全无法完成的复杂任务,且对爬虫的初学者更友好。

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

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

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

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

© 2021 V2EX