我正在尝试使用 Go 库 Chromedp 从网页中抓取一些数据。
我基本上需要点击一个按钮,例如 W3C School 网站上的“点击我”按钮。我需要使用 HTML 标记的value
HTML 属性过滤该按钮input
(因为没有特定的目标 ID,并且大多数 Chromedp 示例都使用基于 ID 属性的选择器)。
以下代码似乎永远挂在初始网页上,而无需单击按钮。
- 为什么下面的代码没有点击按钮?
- Chromedp 是使用一些“标准”xpath 过滤器还是什么?我认为 Chromedp 中选择器的语法是某种标准语法,例如 Selenium,但我找不到了解这些选择器规则的方法。在 Chromedp 选择器中构建过滤器的语法规则是什么?
- Chromedp 的其他文档来源是否不是源代码或 Go 文档?
package main
import (
"context"
"log"
"time"
"github.com/chromedp/chromedp"
)
func main() {
var err error
// create context
ctxt, cancel := context.WithCancel(context.Background())
defer cancel()
// create chrome instance
c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
if err != nil {
log.Fatal(err)
}
// run task list
err = c.Run(ctxt, clickStuff())
if err != nil {
log.Fatal(err)
}
// shutdown chrome
err = c.Shutdown(ctxt)
if err != nil {
log.Fatal(err)
}
// wait for chrome to finish
err = c.Wait()
if err != nil {
log.Fatal(err)
}
log.Printf("DONE")
}
func clickStuff() chromedp.Tasks {
return chromedp.Tasks{
chromedp.Navigate(`https://www.w3schools.com/TAGS/tryit.asp?filename=tryhtml5_input_type_button`),
chromedp.Click(`input[@value='Click me']`, chromedp.NodeVisible),
chromedp.Sleep(5 * time.Second),
}
}
另外,在运行上面的代码时,我看到了各种各样的日志,但基本上我看到这段日志被一遍又一遍地打印出来,这似乎表明标签不存在,但它确实存在而且我不存在知道如何弄清楚选择器使用什么语法?
2019/03/23 17:43:01 <- {"id":25,"method":"DOM.performSearch","params":{"query":"input[@value='Click me']"}}
2019/03/23 17:43:01 -> {"id":25,"result":{"searchId":"1000014442.18","resultCount":0}}