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