1,selenium 是自动化测试以及自动化爬取的框架,常用于python开发,今天这里使用golang selenium进行自动化开发,相比python,主要是社区广泛,golang同样也是跟python功能一样,同时go可以支持大并发携程 自动化爬取节省资源,下面我们就直接上代码案例操作
1,首先需要下载谷歌驱动,并配置到环境变量,必须与chrom版本相同
版本对比网站
https://googlechromelabs.github.io/chrome-for-testing/
2,安装golang idea ,并配置golang环境变量
3,如果成功打开了谷歌浏览器,那么golang的selenium自动化配置完成,里面的代码自行配置了
核心代码
func LeisuSelenumTwo() {
opts := []selenium.ServiceOption{
selenium.Output(os.Stderr), // Output debug information to STDERR.
}
selenium.SetDebug(true)
service, err := selenium.NewChromeDriverService(seleniumPath, port, opts...)
if err != nil {
panic(err) // panic is used only as an example and is not otherwise recommended.
}
defer service.Stop()
fmt.Println(">>>>>>>执行到这里了》》》》》》》》")
// 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))
fmt.Println(">>>>>>>执行到这里222222222222222")
if err != nil {
panic(err)
}
fmt.Println("开始执行自动化")
defer wd.Quit()
fmt.Println(">>>>>>>>>>>>>")
// Navigate to the simple playground interface.
if err := wd.Get("http://www.baidu.com"); err != nil {
panic(err)
}
time.Sleep(time.Second * 10)
fmt.Println("自动化执行结束")
// Get a reference to the text box containing code.
//elem, err := wd.FindElement(selenium.ByCSSSelector, "#code")
//if err != nil {
// panic(err)
//}
Remove the boilerplate code already in the text box.
//if err := elem.Clear(); err != nil {
// panic(err)
//}
//
Enter some new code in text box.
//err = elem.SendKeys(`
// package main
// import "fmt"
// func main() {
// fmt.Println("Hello WebDriver!")
// }
//`)
//if err != nil {
// panic(err)
//}
//
Click the run button.
//btn, err := wd.FindElement(selenium.ByCSSSelector, "#run")
//if err != nil {
// panic(err)
//}
//if err := btn.Click(); err != nil {
// panic(err)
//}
//
Wait for the program to finish running and get the output.
//outputDiv, err := wd.FindElement(selenium.ByCSSSelector, "#output")
//if err != nil {
// panic(err)
//}
//
//var output string
//for {
// output, err = outputDiv.Text()
// if err != nil {
// panic(err)
// }
// if output != "Waiting for remote server..." {
// break
// }
// time.Sleep(time.Millisecond * 100)
//}
//
//fmt.Printf("%s", strings.Replace(output, "\n\n", "\n", -1))
}