Skip to main content

devtools.browser

包 devtools.browser

​ 注意:除了devtools包下、base_devtools.browser包也有同名文件;清注意区分。


devtools.NewBrowser 创建浏览器对象、并返回浏览器对象。

  • 当调用这个函数的时候、就会默认打开对应路径的浏览器、

  • 如果你需要多个进程、多个线程、多个browser对象的时候,无需担心进程冲突、因为他会自动选择未被占用的端口进行通信。

    简单理解就是不用管他。你写你的剩下的交给LUNA

Arguments

  • chromiumPath 参数是必须的 , chromiumPath 就是你浏览器的路径;让我试图详细的解释一下。

    • mac 、他应该就是你下载下来的浏览器找到他的可执行程序、通常叫Chromium.app,然后右键、显示包内容
      • 找到类似MacOS目录的Chromium 这个就是你可运行程序的文件、他的路径就是本参数的路径
      • 如果你的路径有空格、你不妨可以创建一个软连接(windows叫快捷方式)到任何你喜欢的目录,然后作为路径也是一样的
    • window、
      • 你找到你的Chromium.exe作为路径就可以了
      • 如果路径有空格、或者权限问题、你也可以在任意目录创建快捷方式、来作为可执行文件路径也是一样的。
  • options *BrowserOptions 参数是可选的;具体可以查看示例代码。这里着重说4点、其他看代码或案例更好理解。

  • CachePath:

    • 这个就是你可以理解一个用户就一个缓存目录、这个就是你当前用户的缓存目录;选一个你喜欢的任意目录均可。

    • 其实就是存放你浏览器缓存数据的,比较占用磁盘空间。

  • ImgPath:

    • 这个是基于视觉所必须的、也就是这个里面应该都是你自己存储的小图的路径;比如你的路径是:"/Users/xxx/Documents/workspace/luna/test_img/baidu_img" 那么你可以在下面在创建文件存储
    • 你具体的小图,比如home_target.png等等
  • Fingerprint:

    • 这里不展开讲、可以查看专门设置指纹的案例章节,这里是设置浏览器指纹的、因为我修改的是chromium源代码,所以你只有用我的浏览器才可以用这个
    • 对应的功能、他可以修改header信息、包括useragent、包括、语言、地理位置、时区、cavans指纹、
    • 包括、隐身模式下浏览器头暴露的问题、包括鼠标键盘可信问题、包括puppeteer、playwright、Selenium、brave等
    • 特征被识别问题。
  • ImgPath:

    • 这个是基于视觉所必须的、也就是这个里面应该都是你自己存储的小图的路径;比如你的路径是:"/Users/xxx/Documents/workspace/luna/test_img/baidu_img" 那么你可以在下面在创建文件存储
    • 你具体的小图,比如home_target.png等等、建议看一下案例,因为很简单、但是不好解释。

Usage


//示例1
//mac 。chromiumPath:="/Users/xxx/Documents/workspace/Chromium.app/Contents/MacOS/Chromium"
//windows。chromiumPath:="C:\Users\Username\Documents\Chromium.exe"

//打开浏览器、并且创建浏览器对象。
chromiumPath := "your chromium path/Chromium.app/Contents/MacOS/Chromium"
browserObj := devtools.NewBrowser(chromiumPath, &devtools.BrowserOptions{
CachePath: luna_utils.CreateCacheDirInSubDir("your custom cache directory/cache"),
Headless: false,
})

time.Sleep(1 * time.Minute)
//关闭浏览器
browserObj.Close()



//示例2
chromiumPath:="/Users/xxx/Documents/workspace/Chromium.app/Contents/MacOS/Chromium"
browserObj := devtools.NewBrowser(chromiumPath, &devtools.BrowserOptions{
//每个用户缓存文件的路径、就是浏览器缓存
CachePath: luna_utils.CreateCacheDirInSubDir("/Users/xxx/Documents/workspace/cache"),
//这个是你图片缓存的路径、如果后面用到基于视觉操作、就需要这个路径;
ImgPath: "/Users/xxx/Documents/workspace/luna/test_img/baidu_img",
//是否是Headless模式
Headless: false,
//代理ip、支持http、https、sockts5代理类型、同时无论是否有用户名密码均支持。
如:"socks5://API1M5V:9BF49220D11@42.179.160.60:39349"
如:"https://API1M5TV:9BFF49220D11@42.179.160.60:39349"
如:"http://42.179.160.60:39349"
ProxyStr: "https://API1M5TV:9BFF49220D11@42.179.160.60:39349",
//这个在指纹篇详细介绍、这里仅作示例、大概意思就是可以在这里修改你的浏览器指纹。
Fingerprint: []string{"fingerprint1", "fingerprint2"},
//窗口大小 、就是你浏览器的窗口大小
WindowSize: &devtools.WindowSize{
Width: 1496,
Height: 967,
},
})

time.Sleep(1 * time.Minute)
//关闭浏览器
browserObj.Close()

Returns

devtools.browser


OpenPage 打开一个新页面

err,p1:=browserObj.OpenPage("http://www.baidu.com")

Arguments

Url 你需要打开的网址。

Returns

error, 错误信息

*Page ,devtools.Page对象


OpenPageAndListen 打开页面并且创建监听、例如你可以在监听里面监听页面是否加载完成、监听网络请求情况等。

Arguments

  • url string 你需要打开的网址

  • fns ...func(devToolsConn *protocol.DevToolsConn) 这个是一个回掉函数、他会自动传入protocol.DevToolsConn类型的链接对象

    以便于后续操作。

    ​ devToolsConn、这个是底层的sockets链接的对象;他会作为参数传递进来、你可以根据自己的需求判断是否需要使用。

var wg sync.WaitGroup // 同步等待
wg.Add(1) // 增加等待的数量
err, p1 := browserObj.OpenPageAndListen("https://www.baidu.com/", func(devToolsConn *protocol.DevToolsConn) {
//显示json格式日志
devToolsConn.ShowLog(true)
page.PageEnable(devToolsConn)
//等待页面加载完成
devToolsConn.SubscribeOneTimeEvent("Page.loadEventFired", func(param interface{}) {
wg.Done() // 标记回调函数执行完成
page.PageDisable(devToolsConn)
})
})
wg.Wait() // 等待回调函数执行完成

Returns

error, 错误信息

*Page ,devtools.Page对象


GetPages 获取当前浏览器显示的所有页面。

    for _,pi:=range browserObj.GetPages(){
//这句可选、只是将页面置于前台而已,防止个别网站对隐藏页面识别
browserObj.SwitchPage(pi)
//打印基本信息
fmt.Println(pi.PageID)
fmt.Println(pi.CurrentURL)
fmt.Println(pi.DevToolsConn)
fmt.Println(pi.Title)
fmt.Println(pi.GetHtml())
}

Returns

[]*Page ,devtools.Page对象数组


SwitchPage 切换页面至前台显示

Returns

​ gjson.Result 返回devtools 协议返回内容。


SwitchPageAndListen 切换页面至前台显示、并且监听。

  • 切换到页面后、可以监听页面的事件、比如页面加载事件、网络事件等。

    for _, pi := range browserObj.GetPages() {
    browserObj.SwitchPageAndListen(pi, func(devToolsConn *protocol.DevToolsConn) {
    //仅举例
    network.EnableNetwork(pi.DevToolsConn)
    network.RequestResponseAsync(pi.DevToolsConn, func(requestId string, request, response map[string]interface{}) {
    //这里等request & response 是一一对应等请求
    fmt.Println(luna_utils.FormatJSONAsString(request), luna_utils.FormatJSONAsString(response))
    //如果需要监听某个网址内容、并且打印他具体等网络请求信息等。
    //network.GetResponseBody(pi.DevToolsConn, requestId, time.Minute)
    })
    //end
    })
    }

Returns

​ gjson.Result 返回devtools 协议返回内容。


Close 关闭整个浏览器、

​ 大多数情况下、你用不到这个函数,但是当你需要写多线程、或者多进程的时候需要用。

browserObj.Close()