我正在尝试使用Go库Chromedp从网页中抓取一些数据。

我基本上需要单击一个按钮,例如W3C School网站上的“单击我”按钮。我需要使用value HTML标记的input HTML属性过滤该按钮(因为没有要定位的特定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}}
    

    最佳答案

    您可以使用BySearch选择器选择html属性:

    chromedp.Click(`//*[@value="Click me"]`, chromedp.BySearch)
    

    关于go - 单击带有Chromedp的按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55316689/

    10-11 11:56