猿问

chromedp 中的任务。操作函数未按预期工作

这是我的代码:


package main


import (

        "context"

        "log"

        "fmt"

        "github.com/chromedp/chromedp"

)


func main() {

        queries := [3]string{"Object.keys(window);", "window.CSS", "window.Array"}


        // create context

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

        defer cancel()


        // run task list

        var res []byte

        err := chromedp.Run(ctx,

                chromedp.Navigate(`https://www.google.com/`),

                chromedp.ActionFunc(func(ctx context.Context) error {

                for _, query := range queries {


                        err2 := chromedp.Evaluate(query, &res)

                        if err2 != nil {

                                fmt.Printf("error in ActionFunc: %s\n", err2)

                        }


                        fmt.Printf("Query %s outputs: %v\n", query, res)

                }

        return nil

        }),

        )

        if err != nil {

                log.Fatal(err)

        }


}

我试图做的是导航到评估并获取大列表的值(我在示例中将数组减少到3个查询)。urlqueries


然后它应该只输出这些查询的值。


但是我得到的是每次迭代的这些错误:


error in ActionFunc: %!s(chromedp.ActionFunc=0x7f25a0)

Query Object.keys(window); outputs: []

error in ActionFunc: %!s(chromedp.ActionFunc=0x7f25a0)

Query window.CSS outputs: []

error in ActionFunc: %!s(chromedp.ActionFunc=0x7f25a0)

Query window.Array outputs: []


慕田峪4524236
浏览 221回答 1
1回答

慕婉清6462132

铬。评估不返回错误。它返回 EvaluateAction。它具有接受上下文的Do func。所以你可以试试这个;queries := [3]string{"Object.keys(window);", "window.CSS", "window.Array"}    // create context    ctx, cancel := chromedp.NewContext(context.Background())    defer cancel()    // run task list    var res []byte    err := chromedp.Run(ctx,        chromedp.Navigate(`https://www.google.com/`),        chromedp.WaitReady("body"),        //chromedp.Evaluate("Object.keys(window)", &res),        chromedp.ActionFunc(func(ctx context.Context) error {            for _, query := range queries {                chromedp.Evaluate(query, &res).Do(ctx)                fmt.Printf("Query %s outputs: %+v\n", query, string(res))            }            return nil        }),    )    if err != nil {        log.Fatal(err)    }    
随时随地看视频慕课网APP

相关分类

Go
我要回答