我有一个复杂的问题。首先:github.com/tebeka/selenium是我用于chromedriver / selenium的库。这是我启动chromedriver的基本代码(有效):
const (
chromeDriverPath= `chromedriver.exe`
port= 8080
)
service, err := selenium.NewChromeDriverService(chromeDriverPath, port)
if err != nil {
log.Fatal(err)
}
defer service.Stop()
// Connect to the WebDriver instance running locally.
caps := selenium.Capabilities{"browserName": "chrome"}
wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port))
if err != nil {
log.Fatal(err)
}
defer wd.Quit()
问题出在我在运行Windows Server 2012的Windows服务器上运行它时。这是我的代码失败的一部分。
for {
_, err := wd.FindElement(selenium.ByXPATH, xpath1)
if err != nil {
fmt.Println("Waiting to get to get to webpage")
time.Sleep(time.Second * 10)
} else {
fmt.Println("Successfully found page.")
fmt.Println("Getting verification token.")
vT, err := wd.FindElement(selenium.ByXPATH, verificationTokenXpath)
if err != nil{
log.Fatal(err)
}
VerifictionToken, err = vT.GetAttribute("value")
if err != nil {
log.Fatal(err)
}
break
}
}
这是一个简单的代码块,可不断循环播放,直到webdriver到达特定网页为止,在这种情况下,它将获取令牌。循环部分可以正常工作,但是一旦找到该网页,它将挂起,然后再执行其他操作。例如,在上面的代码中:“成功找到页面”。将永远不会被打印。为了澄清,这只会在此特定的Windows服务器上发生。 如果有人知道这个问题,请告诉我。
编辑: 问题归结为:发现元素时wd.FindElement被阻止。这仅在特定的操作系统(例如Windows Server 2012)上发生。有人对如何修复有建议吗?我确实需要获取Web元素的值,也许我可以解析html?