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 main
import (
"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)
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)