go包chromedp所有中文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
示例代码
var buf []byte
if err := chromedp.Run(ctx, chromedp.Screenshot(`img.Homepage-logo`, &buf, chromedp.NodeVisible)); err != nil {
log.Fatal(err)
}
if err := os.WriteFile("elementScreenshot.png", buf, 0644); err != nil {
log.Fatal(err)
}
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 {
示例代码
var buf []byte
if err := chromedp.Run(ctx, chromedp.FullScreenshot(&buf, chromedp.NodeVisible)); err != nil {
log.Fatal(err)
}
if err := os.WriteFile("fullScreenshot.png", buf, 0644); err != nil {
log.Fatal(err)
}
选择器: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网。