У меня сложная проблема. Прежде всего: github.com/tebeka/selenium - это библиотека, которую я использую для chromedriver / selenium. Вот мой основной код для запуска хроматического драйвера (работает):
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-сервере под управлением Windows Server 2012. Это часть моего кода, которая дает сбой.
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
}
}
Это простой блок кода для непрерывного цикла, пока веб-драйвер не окажется на определенной веб-странице, и в этом случае он получит токен. Часть зацикливания будет работать нормально, но как только она найдет веб-страницу, она зависнет, прежде чем делать что-либо еще. Например, в приведенном выше коде: «Страница успешно найдена». никогда не будет напечатан. Чтобы уточнить, это произойдет только на этом конкретном сервере Windows.
Если кто-нибудь знает проблему, пожалуйста, дайте мне знать.
EDIT:
Проблема сводится к следующему: wd.FindElement блокируется, когда элемент найден. Это происходит только в определенных операционных системах, таких как Windows Server 2012. У кого-нибудь есть предложения, как это исправить? Мне нужно получить значение веб-элемента, может быть, я смогу разобрать html?