网站地图    收藏   

主页 > 后端 > Golang >

go包chromedp所有中文api和实列说明

来源:未知    时间:2023-04-26 17:26 作者:小飞侠 阅读:

[导读] go包chromedp所有中文api和实列说明 chromedp是一个用于控制谷歌浏览器(Chrome或Chromium)的Go语言包。以下是其所有中文API及其示例说明: AllocCtx: 分配一个新的Chrome上下文。该函数返回一...

go包chromedp所有中文api和实列说明

chromedp是一个用于控制谷歌浏览器(Chrome或Chromium)的Go语言包。以下是其所有中文API及其示例说明:


初入尝试

AllocCtx:上下文

分配一个新的Chrome上下文。该函数返回一个context.Context对象和一个chromedp.Context对象,后者可以用于控制浏览器。


示例代码:

ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()


ListenTarget:目标事件

监听来自Chrome的调试目标事件。该函数返回一个chan *cdp.TargetInfo类型的通道,每当检测到新的调试目标时,通道就会收到TargetInfo结构体的实例。


示例代码:

ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
targetChan := chromedp.ListenTarget(ctx, func(ev interface{}) {
    switch ev.(type) {
    case *cdp.EventTargetCreated:
        targetCreated := ev.(*cdp.EventTargetCreated)
        fmt.Printf("New target created: %v\n", targetCreated.TargetInfo.URL)
    }
})
defer chromedp.StopListenTarget(ctx, targetChan)


Run:执行

在给定的Chrome上下文中运行一系列操作。该函数接受一个chromedp.Context对象、一组选项和要执行的操作,其中每个操作都是一个chromedp.Action类型的函数。


示例代码:

ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
var pageTitle string
err := chromedp.Run(ctx,
    chromedp.Navigate("https://www.google.com/"),
    chromedp.Title(&pageTitle),
)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Page title: %s\n", pageTitle)


NewAllocator:分配器

创建一个Chrome实例分配器。这个函数可以传入一些选项,比如Chrome二进制路径、调试端口等。


示例代码:

allocator, err := chromedp.NewAllocator(context.Background())
if err != nil {
    log.Fatal(err)
}
defer allocator.CancelAll()
ctx, cancel := allocator.Allocate(context.Background())
defer cancel()
var pageTitle string
err = chromedp.Run(ctx,
    chromedp.Navigate("https://www.google.com/"),
    chromedp.Title(&pageTitle),
)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Page title: %s\n", pageTitle)


Navigate:导航

导航到指定的URL。该函数接受一个字符串类型的URL参数。


示例代码:

err := chromedp.Run(ctx,
    chromedp.Navigate("https://www.google.com/"),
)
if err != nil {
    log.Fatal(err)
}


Click:点击事件

模拟单击指定元素。该函数接受一个选择器字符串作为参数,用于定位要点击的元素。


示例代码:

err := chromedp.Run(ctx,
    chromedp.Click("#my-button"),
)
if err != nil {
    log.Fatal(err)
}


WaitVisible:等待可见元素

等待指定元素可见。该函数接受一个选择器字符串作为参数,用于定位要等待的元素。


示例代码:

err := chromedp.Run(ctx,
    chromedp.WaitVisible("#my-element"),
)
if err != nil {
    log.Fatal(err)
}


WaitNotVisible:等待不可见元素

等待指定元素不可见。该函数接受一个选择器字符串作为参数,用于定位要等待的元素。


示例代码:

err := chromedp.Run(ctx,
    chromedp.WaitNotVisible("#my-element"),
)
if err != nil {
    log.Fatal(err)
}


SetValue:设置元素值

将值设置给指定元素。该函数接受两个参数:一个选择器字符串,用于定位要设置的元素,和一个字符串类型的值。


示例代码:

err := chromedp.Run(ctx,
    chromedp.SetValue("#my-input", "hello world"),
)
if err != nil {
    log.Fatal(err)
}


屏幕截图

chromedp中屏幕截图主要用到screenshot.go里面方法,主要参数如下


chromedp.Screenshot


//屏幕截图是一个元素查询操作,用于获取第一个元素的屏幕截图

//与选择器匹配的节点。

//

//它的作用应该与Chrome中的“捕获节点屏幕截图”命令相同。

//

//行为说明:协议监视器显示命令发送以下内容

//CDP命令也是:

//-仿真.clearDeviceMetricsOverride

//-Network.setUserAgentOverride with{“userAgent”:“”}

//-Overlay.setShowViewportSize用{“show”:false}重新调整大小

//

//这些CDP命令不是由chromedp发送的。如果它没有如预期那样工作,

//您可以尝试自己发送这些命令。

//

//请参阅[CaptureScreenshot]以获取浏览器视口的屏幕截图。

//

//请参阅[屏幕截图]以获取整个页面的屏幕截图示例。

//

// [screenshot]: https://github.com/chromedp/examples/tree/master/screenshot


func Screenshot(sel interface{}, picbuf *[]byte, opts ...QueryOption) QueryAction



chromedp.CaptureScreenshot

//CaptureScreenshot是一个捕捉/截取

//当前浏览器视口。

//

//它的作用应该与中的命令“捕获屏幕截图”相同

//铬。有关更多信息,请参阅屏幕截图的行为说明。

//

//请参阅[Screenshot]操作以获取特定元素的屏幕截图。

//

//请参阅[屏幕截图]以获取整个页面的屏幕截图示例。

//

// [screenshot]: https://github.com/chromedp/examples/tree/master/screenshot

func CaptureScreenshot(res *[]byte) Action {




chromedp.FullScreenshot

//FullScreenshot使用指定的图像质量拍摄完整的屏幕截图

//整个浏览器视口。

//

//它的作用应该与命令“捕获全尺寸屏幕截图”相同

//铬合金。有关更多信息,请参阅屏幕截图的行为说明。

//

//压缩质量的有效范围为[0..100]。当此值为

//100,图像格式为png;否则,图像格式为jpeg。

func FullScreenshot(res *[]byte, quality int) EmulateAction {


选择器:Query

选择器类似前端jQuery,主要用到了query.go下的相关方法,上面初入里面已经列举出实例,下面将列举常用的。

chromedp.NodeIDs

//NodeID是一个元素查询操作,用于检索与

//选择器。

func NodeID(sel接口{},ids*[]cdp.NodeID,opts…QueryOption)

var nodeIDs []cdp.NodeID
if err := Run(ctx, NodeIDs("#input2", &nodeIDs, ByID)); err != nil {
t.Fatalf("got error: %v", err)
}
if len(nodeIDs) != 1 {
t.Errorf("expected to have exactly 1 node id: got %d", len(nodeIDs))
}
var value string
if err := Run(ctx,
WaitReady("#input2", ByID),
Value(nodeIDs, &value, ByNodeID),
); err != nil {
t.Fatalf("got error: %v", err)
}

chromedp.AttributeValue

//AttributeValue是检索元素属性值的元素查询操作

//用于匹配选择器的第一元素节点。

func AttributeValue(sel interface{}, name string, value *string, ok *bool, opts ...QueryOption) QueryAction {


chromedp.SetAttributeValue

//SetAttributeValue是一个元素查询操作,它将元素属性设置为

//name到与选择器匹配的第一个元素节点的值。

func SetAttributeValue(sel interface{}, name, value string, opts ...QueryOption) QueryAction {


chromedp.Text


//Text是一个元素查询操作,用于检索第一个元素的可见文本

//与选择器匹配的节点。

func Text(sel interface{}, text *string, opts ...QueryOption) QueryAction {


chromedp.TextContent

//TextContent是一个元素查询操作,用于检索第一个元素的文本内容

//与选择器匹配的节点。

func TextContent(sel interface{}, text *string, opts ...QueryOption) QueryAction {


罗列一堆


Click

//单击是一个元素查询操作,它将鼠标单击事件发送到第一个元素

//与选择器匹配的节点。

func Click(sel interface{}, opts ...QueryOption) QueryAction {


DoubleClick

//双击是一个元素查询操作,它将鼠标双击事件发送到

//与选择器匹配的第一元素节点。

func DoubleClick(sel interface{}, opts ...QueryOption) QueryAction {


//SetUploadFiles是一个元素查询操作,用于设置要上传的文件(即

//input[type=“file”]节点),用于匹配选择器的第一个元素节点。

func SetUploadFiles(sel interface{}, files []string, opts ...QueryOption) QueryAction {


//SetUploadFiles是一个元素查询操作,用于设置要上传的文件(即

//input[type=“file”]节点),用于匹配选择器的第一个元素节点。

func SetUploadFiles(sel interface{}, files []string, opts ...QueryOption) QueryAction {


//Reset是一个元素查询操作,用于重置第一个元素的父窗体

//与选择器匹配的节点。

func Reset(sel interface{}, opts ...QueryOption) QueryAction {


//ComputedStyle是一个元素查询操作,用于检索

//与选择器匹配的第一元素节点。

func ComputedStyle(sel interface{}, style *[]*css.ComputedStyleProperty, opts ...QueryOption) QueryAction {



//ComputedStyle是一个元素查询操作,用于检索

//与选择器匹配的第一元素节点。

func ComputedStyle(sel interface{}, style *[]*css.ComputedStyleProperty, opts ...QueryOption) QueryAction {


//ScrollIntoView是一个元素查询操作,用于将窗口滚动到

//与选择器匹配的第一元素节点。

func ScrollIntoView(sel interface{}, opts ...QueryOption) QueryAction {


导航

主要用到了 nav.go


//NavigateAction是始终触发页面导航、等待的操作

//以便加载页面。

//

//请注意,这些操作不会收集HTTP响应信息;为此,

//请参阅[运行响应]。


//导航是对当前帧进行导航的操作。

func Navigate(urlstr string) NavigateAction {


//NavigationEntries是一个检索页面导航历史记录的操作

//条目。

func NavigationEntries(currentIndex *int64, entries *[]*page.NavigationEntry) Action {



//NavigateToHistoryEntry是导航到指定导航的操作

//输入。

func NavigateToHistoryEntry(entryID int64) NavigateAction {



//NavigateBack是一个在

//历史。

func NavigateBack() NavigateAction {



//NavigateForward是在中向前导航当前帧的操作

//它的历史。

func NavigateForward() NavigateAction {



//重新加载是重新加载当前页面的操作。

func Reload() NavigateAction {


//停止是一个停止所有导航和挂起的资源检索的操作。

func Stop() Action {



//位置是检索文档位置的操作。

func Location(urlstr *string) Action {



//标题是检索文档标题的操作。

func Title(title *string) Action {


util工具集合

站长犯懒了哈,贴图了:

forcelP func(ctx context.Context, urlstr string) (string, error)

resolveHost func(ctx context.Context, host string) (string, error)

modifyURL func(ctx context.Context, urlstr string) (string, error)

runListeners func (list []cancelableListener, ev interface(}) []cancelableListener

frameOp func(*cdp.Frame)

frameAttached func(id cdp.FramelD) frameOp

frameDetached func(f *cdp.Frame)

frameStartedLoading func(f *cdp.Frame)

frameStoppedLoading func(f *cdp.Frame)

setFrameState func(f *cdp.Frame, fs cdp.FrameState)

clearFrameState func(f *cdp.Frame, fs cdp.FrameState)

nodeOp func(*cdp.Node)

walk func (m map[cdp.NodelD]*cdp.Node, n *cdp.Node)

setChildNodes func (m map[cdp.NodelD]*cdp.Node, nodes []*cdp.Node) nodeOp

attributeModified func(name, value string) nodeOp

attributeRemoved func(name string) nodeOp

inlineStylelnvalidated func(ids []cdp.NodelD) nodeOp

characterDataModified func(characterData string) nodeOp

childNodeCountUpdated func(count int64) nodeOp

childNodelnserted func (m map[cdp.NodelD]*cdp.Node, prevID cdp.NodelD, c *cdp.Node)

childNodeRemoved func (m map[cdp.NodelD]*cdp.Node, id cdp.NodelD) nodeOp

shadowRootPushed func (m map[cdp.NodelD]*cdp.Node, c *cdp.Node) nodeOp

shadowRootPopped func (m map[cdp.NodelD]*cdp.Node, id cdp.NodelD) nodeOp

pseudoElementAdded func (m map[cdp.NodelD]*cdp.Node, c *cdp.Node) nodeOp

pseudoElementRemoved func(m map[cdp.NodelD]*cdp.Node, id cdp.NodelD) nodeOp

distributedNodesUpdated func(nodes []*cdp.BackendNode) nodeOp

insertNode func(n []*cdp.Node, prevID cdp.NodelD, c *cdp.Node) []*cdp.Node

removeNode func(n []*cdp.Node, id cdp.NodelD) []*cdp.Node

isCouldNotComputeBoxModelError func(err error) bool


执行JS语句


//Evaluate是一个用于评估JavaScript表达式的操作,用于解组

//对res.的脚本评估结果。

//

//当res为nil时,脚本结果将被忽略。

//

//当res是*[]字节时,脚本的原始JSON编码值

//结果将放在res。

//

//当res是**运行时.RemoteObject时,res将被设置为低级别

//协议类型,并且不会尝试转换结果。

//原始对象可以保留在内存中,直到页面

//导航或关闭`runtime.ReleaseObject`或`runtime.RelaseObjectGroup`

//可以用来要求浏览器释放原始对象。

//

//对于所有其他情况,脚本的结果将“按值”返回(即。,

//JSON编码),随后将对JSON进行尝试。Unmarshal

//脚本结果为res.当脚本结果为“undefined”或“null”时,

//并且res所指向的值不能为零(只有chan的值,

//func、interface、map、pointer或slice可以为nil),返回[ErJSUndefined]

//或[ErJSNull]。

Evaluate


parseRemoteObject


//EvaluateAsDevTools是一个将JavaScript表达式求值为

//Chrome DevTools会在“控制台”上下文中评估表达式,

//并使脚本可以使用命令行API。

//

//有关如何评估脚本表达式的详细信息,请参见[评估]。

//

//注意:这不应该与不受信任的JavaScript一起使用。

EvaluateAsDevTools


://EvalObjectGroup是用于设置对象组的评估选项。

EvalObjectGroup



//EvalWithCommandLineAPI是一个评估选项,用于生成DevTools命令

//行API可用于评估的脚本。

//

//有关评估操作如何工作的更多信息,请参阅[评估]。

//

//注意:这不应该与不受信任的JavaScript一起使用。

EvalWithCommandLineAPI



//EvalIgnoreExceptions是一个评估选项,它将导致JavaScript

//评估以忽略异常。

EvalIgnoreExceptions



//EvalAsValue是一个评估选项,它将导致评估的JavaScript

//表达式,将表达式的结果编码为JSON编码的值。

EvalAsValue


持续更新中...


以上就是go包chromedp所有中文api和实列说明全部内容,感谢大家支持自学php网。


自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论