hunter/pre_driver_com.go

62 lines
1.3 KiB
Go
Raw Normal View History

2020-04-10 10:54:19 +00:00
package hunter
import (
"fmt"
"log"
2020-04-10 17:44:31 +00:00
"runtime"
2020-04-10 10:54:19 +00:00
"github.com/474420502/requests"
"github.com/tebeka/selenium"
)
// https://github.com/tebeka/selenium
// PreDriverUrl Task的 curl bash 预处理组件
2020-04-10 17:44:31 +00:00
type PreDriverUrl struct {
url string
service *selenium.Service
driver selenium.WebDriver
}
2020-04-10 10:54:19 +00:00
2020-04-10 17:44:31 +00:00
func (u *PreDriverUrl) Before(ctx *TaskContext) {
2020-04-10 10:54:19 +00:00
service, err := selenium.NewChromeDriverService("chromedriver", 1030)
if err != nil {
log.Panic(err)
}
if err != nil {
panic(err) // panic is used only as an example and is not otherwise recommended.
}
2020-04-10 17:44:31 +00:00
u.service = service
2020-04-10 10:54:19 +00:00
caps := selenium.Capabilities{"browserName": "chrome"}
wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", 1030))
if err != nil {
panic(err)
}
2020-04-10 17:44:31 +00:00
u.driver = wd
runtime.SetFinalizer(&[]interface{}{service, wd}, func(obj interface{}) {
iobj := obj.([]interface{})
service := iobj[0].(*selenium.Service)
service.Stop()
2020-04-10 10:54:19 +00:00
2020-04-10 17:44:31 +00:00
wd := iobj[1].(selenium.WebDriver)
wd.Quit()
})
err = wd.Get(string(u.url))
2020-04-10 10:54:19 +00:00
if err != nil {
panic(err)
}
ele, err := wd.FindElement(selenium.ByXPATH, "//title")
log.Println(ele.Text())
2020-04-10 17:44:31 +00:00
log.Println(ele.TagName())
2020-04-10 10:54:19 +00:00
}
2020-04-10 17:44:31 +00:00
func (u *PreDriverUrl) Hunt() (requests.IResponse, error) {
err := u.driver.Get(string(u.url))
return nil, err
2020-04-10 10:54:19 +00:00
}