如何使用golang knq/chromedp检查页面中是否存在元素

如何使用golang knq/chromedp检查页面中是否存在元素,go,web,web-testing,Go,Web,Web Testing,我正在创建一个应用程序来使用[chromedp][1] 如何检查页面中是否存在元素 我试图使用cdp.WaitVisible(),但它没有满足我的需求 我需要这个,这样我就可以使措辞,如果应用程序将做一件事或其他 对于本例,假设我需要知道搜索输入是否存在 我该怎么做 [1]: 这是我的答案。 该网页位于www.google.co.in。使用的元素是lst ib,文本框显示在页面上 浏览页面 等待直到元素可见 读取元素的值。这是第一次加载页面,所以很明显值将是“” 假设您已通过在文本框中键入来修改

我正在创建一个应用程序来使用[chromedp][1]

如何检查页面中是否存在元素

我试图使用
cdp.WaitVisible()
,但它没有满足我的需求

我需要这个,这样我就可以使措辞,如果应用程序将做一件事或其他

对于本例,假设我需要知道搜索输入是否存在

我该怎么做

[1]:

这是我的答案。 该网页位于
www.google.co.in
。使用的元素是
lst ib
,文本框显示在页面上

  • 浏览页面

  • 等待直到元素可见

  • 读取元素的值。这是第一次加载页面,所以很明显值将是

  • 假设您已通过在文本框中键入来修改元素的值。现在,如果我们尝试读取同一元素的值
    lst ib
    ,那么我们应该得到更新后的值

  • 我的代码在下面

    package main
    
    import (
        "context"
        "log"
    
        cdp "github.com/knq/chromedp"
    )
    
    func main() {
        var err error
    
        // create context
        ctxt, cancel := context.WithCancel(context.Background())
        defer cancel()
    
        // create chrome instance
        c, err := cdp.New(ctxt)
        if err != nil {
            log.Fatal(err)
        }
    
        // run task list
        var res, value, newValue string
        err = c.Run(ctxt, text(&res, &value, &newValue))
        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)
        }
    
        if len(value) > 1 {
            log.Println("Search Input is present.")
        } else {
            log.Println("Search Input is NOT present.")
        }
    
        log.Println("New updated value: ", newValue);   
    
    }
    
    func text(res, value, newValue *string) cdp.Tasks {
        return cdp.Tasks{
            cdp.Navigate(`https://www.google.co.in`),
            cdp.WaitVisible(`lst-ib`, cdp.ByID),
            cdp.EvaluateAsDevTools("document.getElementById('lst-ib').value", value),
            cdp.EvaluateAsDevTools("document.getElementById('lst-ib').value='Hello';document.getElementById('lst-ib').value", newValue),
        }
    }
    
    要运行代码,请使用
    go run.go

    我得到了预期的以下输出:

    $ go run main.go 
    2017/09/28 20:05:20 Search Input is NOT present.
    2017/09/28 20:05:20 New updated value:  Hello
    
    注意:

    首先,我检查了
    googlechrome开发工具
    ,以获得符合我需要的准确的
    Javascript
    s。这很有帮助。 我已经添加了我在Chrome开发者工具上尝试的Javascript的屏幕截图


    我希望这对你有帮助。:)

    下面是一个我需要做的示例:我曾经用python和selenium来做这件事:
    user=browser.find_element_by_css_selector(用户输入)
    它给我一个指向该元素的指针或一个nil值,我可以检查该元素是否存在。如何使用该元素执行相同的示例chromedp@AmrZenga:我相信chromedp的包装。有不同的功能可用。我相信,
    BySearch()
    将对您的情况有所帮助。另外,我在回答中提到的JavaScript方法也会起作用。:)@AmrZenga:
    Kenneth Shaw
    已经解决了您在GitHub上创建的问题,因此我的答案是正确的,并且效果良好。所以,如果你不能找到一种方法来处理
    chromedp
    thx的其他函数,我建议你使用它,但是我需要一个我上面提到的工作示例,javascript方法不起作用,如果你知道我需要什么,请用一个示例响应,我只想知道页面上是否有项目,或者not@AmrZenga我相信我已经通过举例回答了你的问题。您可以通过修改它来使用它。你能展示一下你用JavaScript尝试过的东西吗?你是说,它不起作用?这样我们也可以了解你的确切问题。这次向我们展示您的实际问题,以获得更好、更精确的解决方案。
    $ go run main.go 
    2017/09/28 20:05:20 Search Input is NOT present.
    2017/09/28 20:05:20 New updated value:  Hello