【发布时间】:2018-07-08 10:00:34
【问题描述】:
我有一个包含术语列表的切片,我想在某个搜索引擎页面中搜索每个术语,所以我这样做:
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 中调用它时
err = c.Run(ctxt, risk(items))
if err != nil {
log.Fatal(err)
}
在ActionFunc 之前一切正常。无论我可以在函数(截屏等)之前添加什么操作都没有问题。
但是,ActionFunc 内部的操作不会被执行。
原因是return nil吗?我想返回一组任务,就像我在循环外执行的操作一样,但我找不到如何在 ActionFunc 的循环内执行此操作,因为返回的总是最新的项目而不是完整的集合...返回nil 是让函数至少开始的唯一方法。
在一组chromedp.Tasks 中执行此类循环操作的正确方法是什么?
【问题讨论】:
-
ActionFunc描述了一个动作,它不会运行它。您需要致电.Do(context, executor)了解您的内部操作。您还应该检查Do返回的错误并将其返回。您可以看到现有操作是如何从其他操作构建的。例如,Navigate 操作。 -
谢谢,正如你所说,我实际上错过了
Do。我添加了它们,现在操作运行良好。如果您愿意,请随时添加答案,我会接受。
标签: go web-scraping automation