首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ActionFunc中,Chromedp不执行循环内的操作

在ActionFunc中,Chromedp不执行循环内的操作
EN

Stack Overflow用户
提问于 2018-01-29 16:27:41
回答 1查看 2K关注 0票数 0

我有一个包含术语列表的片段,我想在某个搜索引擎页面中搜索每个术语,所以我这样做:

代码语言:javascript
复制
func risk(slice []string) chromedp.Tasks {

    return chromedp.Tasks{
        chromedp.Navigate("https://testpage"),
        chromedp.WaitVisible("#query_box", chromedp.ByID),
        chromedp.ActionFunc(func(context.Context, cdp.Executor) error {
            for _, element := range slice[2:] {
                fmt.Println(element)
                chromedp.SendKeys("#query_box", element, chromedp.ByID)
                chromedp.Click("#searchButton", chromedp.ByID),
            }
            return nil
        }),
    }
} 

main中调用它为

代码语言:javascript
复制
err = c.Run(ctxt, risk(items))
    if err != nil {
        log.Fatal(err)
    }

ActionFunc之前,一切都能正常工作。我可以在函数之前添加的任何动作(截图等)毫无问题地工作。

但是,没有执行ActionFunc内部的操作。

return nil的原因吗?我想像在循环之外一样返回一组任务,但是我找不到如何在ActionFunc中的循环中这样做,因为返回总是最新的项目,而不是完整的一组.返回nil是使函数至少开始运行的唯一方法。

在一组chromedp.Tasks中执行这种循环操作的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-30 17:17:21

chromedp.ActionFunc用于构建自定义操作。您提供的函数将在Run阶段执行。

这意味着您的函数需要实际运行您在内部使用的操作。这是通过调用操作上的.Do方法并传递给它一个context.Contextcdp.Executor来完成的。

对于错误,函数应该返回运行过程中遇到的任何错误。当对嵌入的操作调用.Do时,检查错误,如果不为零,则返回错误。

您的代码应该如下所示:

代码语言:javascript
复制
func risk(slice []string) chromedp.Tasks {

    return chromedp.Tasks{
        // ... other actions ...
        chromedp.ActionFunc(func(c context.Context, e cdp.Executor) error {
            for _, element := range slice[2:] {
                fmt.Println(element)
                err := chromedp.SendKeys("#query_box", element, chromedp.ByID).Do(c, e)
                if err != nil {
                  return err
                }
                err = chromedp.Click("#searchButton", chromedp.ByID).Do(c, e)
                if err != nil {
                  return err
                }
            }
            return nil
        }),
    }
}

免责声明:我还没有测试过这段代码,所以可能会出现问题,但是这会给您定义vs执行操作和正确返回错误的一般想法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48505809

复制
相关文章

相似问题

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