rssmon3/copart/browser/browser.go

72 lines
1.4 KiB
Go

package browser
import (
"fmt"
"strings"
"time"
"github.com/tebeka/selenium"
)
type WebDriver interface {
Get(string) error
Quit() error
Close() error
FindElement(string, string) (selenium.WebElement, error)
FindElements(string, string) ([]selenium.WebElement, error)
Refresh() error
}
type WebElement interface {
FindElement(string, string) (selenium.WebElement, error)
FindElements(string, string) ([]selenium.WebElement, error)
Text() (string, error)
GetAttribute(string) (string, error)
}
type Browser struct {
Driver WebDriver
}
func New() (*Browser, error) {
var Driver selenium.WebDriver
var err error
caps := selenium.Capabilities{"browserName": "chrome"}
//caps := selenium.Capabilities{"browserName": "firefox"}
for i := 0; i < 5; i++ {
Driver, err = selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%v/wd/hub", 4444))
if err != nil {
if strings.Contains(err.Error(), "connection refused") {
time.Sleep(time.Second * time.Duration(i+1))
continue
}
if strings.Contains(err.Error(), "timeout") {
time.Sleep(time.Second * time.Duration(i+1))
continue
}
return nil, err
}
}
return &Browser{
Driver: Driver,
}, err
}
func (b *Browser) Get(addr string) error {
return b.Driver.Get(addr)
}
func (b *Browser) Close() error {
if b == nil || b.Driver == nil {
return nil
}
if err := b.Driver.Close(); err != nil {
return err
}
if err := b.Driver.Quit(); err != nil {
return err
}
return nil
}