我正在尝试使用围棋库Chromedp从网页上抓取一些数据。
我基本上需要点击一个按钮,例如W3C学校网站上的“点击我”按钮。我需要使用value HTML标记的input HTML属性过滤该按钮(因为没有要针对的特定ID,大多数示例使用基于ID属性的选择器)。
下面的代码似乎永远挂在初始网页上,而不单击按钮。
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}}发布于 2019-11-18 13:37:58
您可以使用BySearch选择器选择html属性:
chromedp.Click(`//*[@value="Click me"]`, chromedp.BySearch)发布于 2019-03-23 19:58:50
我不知道你的具体语言模式,但按钮是在一个iframe。通常,必须切换到iframe才能访问元素,或者在css中,您可以使用深度组合器。
对于给定的页面,应该是
*/deep/[value="Click me"]快速的google显示css选择器查询可以通过BySearch应用。
https://stackoverflow.com/questions/55316689
复制相似问题