1 . 安装
go get github.com/antchfx/htmlquery//安装xpath解析go get github.com/tebeka/selenium//安装selenium控制浏览器
下载"chromedriver.exe",版本要与chrome浏览器一致.
2 . 启动远程web驱动
./chromedriver.exe --port=9515 --url-base=wd/hub --verbose
这里推荐使用远程模式 . 因为本地端启动的话 , 首先要配置驱动程序 , 并且启动速度没有远程的快 .
3 . 源码及解读
package mainimport ( "fmt" "github.com/antchfx/htmlquery" "github.com/tebeka/selenium" "log" "strings" "time")func main() { // 连接到本地运行的WebDriver实例。 // 功能配置WebDriver进程和目标浏览器,带有标准和特定于浏览器的选项。 caps := selenium.Capabilities{"browserName": "chrome"} //NewRemote创建新的远程客户端,启动一个新的会话。 //urlPrefix:Selenium服务器的URL必须以协议(http, https,…)为前缀。 //如果urlPrefix是空字符串,则默认使用DefaultURLPrefix。 wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:9515/wd/hub")) if err != nil { panic(err.Error()) } //Quit结束当前会话。 //浏览器实例将被关闭。 defer func(wd selenium.WebDriver) { _ = wd.Quit() }(wd) //Get将浏览器打开提供的URL。 _url := "https://www.baidu.com/" if err := wd.Get(_url); err != nil { panic(err) } for { //PageSource返回当前页面的源代码。 _, err := wd.PageSource() if err != nil { return } //获取当前的url currentURL, err := wd.CurrentURL() if err != nil { return } log.Println(wd.CurrentURL()) //判断当前url是不是百度 if currentURL == "https://www.baidu.com/" { //首先找到输入的搜索框 element, err := wd.FindElement("id", "kw") //如果找不到,就等待1秒 if err != nil { time.Sleep(time.Second) } //如果等待1秒后,或者已经找到,就 输入内容hello err = element.SendKeys("hello") if err != nil { time.Sleep(time.Second) } // 获取页面的源码 pageSource, err := wd.PageSource() if err != nil { return } //申明1个reader类型 , 因为htmlquery.Parse的参数要求是reader类型 reader := strings.NewReader(pageSource) parse, err := htmlquery.Parse(reader) if err != nil { return } //找到所有的a链接, 要求a链接中有href属性 nodes := htmlquery.Find(parse, "//a[@href]") for i, node := range nodes { //循环获取每个a标签的文本(htmlquery.InnerText(node)),href属性值(htmlquery.SelectAttr(node, "href")) log.Println(i, htmlquery.InnerText(node), htmlquery.SelectAttr(node, "href")) } } time.Sleep(time.Second * 3) }}
参与评论
手机查看
返回顶部