golang从入门到精通,搭建本地selenium自动化测试环境
用Golang做爬虫,当面对页面存在复杂的JS的情况,使用普通的http.get或者http.post,如不做特殊处理,将无法解析页面源代码。
在使用python的过程中,可以使用selenium进行爬取数据,或使用selenium自动化测试,那么用Golang怎么处理这个问题呢?
其实Golang中也有selenium,Selenium 作为一个用于 Web 应用程序测试的工具,可以模拟真实浏览器进行操作,也可以实现鼠标点击、滚轮、输入等用户日常操作。
我们通过2节课的学习,实现1、本地启动selenium服务;2、远程启动selenium服务。1、本地启动selenium服务配置环境1、下载"github.com/tebeka/selenium"模块 2、下载chrome浏览器 3、下载chrome版本一致的chromedriver.exe源码及解析package main import ( "fmt" "github.com/tebeka/selenium" "log" "os" ) const ( chromeDriverPath = "chromedriver.exe" port = 9515 ) func main() { //ServiceOption配置一个服务实例。 opts := []selenium.ServiceOption{ //在控制台输出调试信息 selenium.Output(os.Stderr), } //SetDebug设置调试模式 selenium.SetDebug(true) //NewChromeDriverService在后台启动一个ChromeDriver实例。 service, err := selenium.NewChromeDriverService(chromeDriverPath, port, opts...) if err != nil { //Panic仅作为示例,不建议使用。 panic(err) } //Stop关闭WebDriver服务 //如果有虚拟帧缓冲区启动,则关闭X虚拟帧缓冲区。 defer service.Stop() // 连接到本地运行的WebDriver实例。 // 功能配置WebDriver进程和目标浏览器,带有标准和特定于浏览器的选项。 caps := selenium.Capabilities{"browserName": "chrome"} //NewRemote创建新的远程客户端,启动一个新的会话。 //urlPrefix:Selenium服务器的URL必须以协议(http, https,…)为前缀。 //如果urlPrefix是空字符串,则默认使用DefaultURLPrefix。 wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port)) if err != nil { panic(err.Error()) } //Quit结束当前会话。 //浏览器实例将被关闭。 defer wd.Quit() //Get将浏览器打开提供的URL。 if err := wd.Get("http://www.baidu.com"); err != nil { panic(err) } for { //PageSource返回当前页面的源代码。 source, err := wd.PageSource() if err != nil { return } log.Println(source) } }