首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >chromedp.ActionFunc中的任务未按预期工作

chromedp.ActionFunc中的任务未按预期工作
EN

Stack Overflow用户
提问于 2021-04-16 02:56:33
回答 1查看 249关注 0票数 0

这是我的代码:

代码语言:javascript
复制
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)
        }

}

我想要做的是导航到url来评估和获取一个很大的queries列表的值(对于这个示例,我将数组减少为3个查询)。

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

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

代码语言:javascript
复制
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: []
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-16 03:56:41

chromedp.Evaluate不返回错误。它返回EvaluateAction。它有接受上下文的Do函数。所以你可以试试这个;

代码语言:javascript
复制
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)
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67114519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档