Golang使用selenium
golang中使用selenium,具体可以参考这篇文章,不是很全,但是基础的差不多都有
地址:
https://bbs.huaweicloud.com/blogs/172024
这里补充说一点,由于使用selenium,浏览器会出现”Chrome正受到测试软件的控制“,
对于有点强迫症的我来说,看着非常不舒服!!!!
可以通过下面这个参数来取消掉这个提示
func main() {
//1.开启selenium服务
ops := []selenium.ServiceOption{}
service, err := selenium.NewChromeDriverService("C:\\Users\\YCKJ2817\\Desktop\\程序包\\chromedriver.exe", port, ops...)
if err != nil {
fmt.Printf("Error starting the ChromeDriver server: %v", err)
}
//延迟关闭服务
defer service.Stop()
caps := selenium.Capabilities{"browserName": "chrome"}
// 去掉”被自动控制“提示
chromeCaps := chrome.Capabilities{
ExcludeSwitches: []string{"enable-automation"},
Args: []string{"no-sandbox"},
}
caps.AddChrome(chromeCaps)
//调用浏览器urlPrefix: 测试参考:DefaultURLPrefix = "http://127.0.0.1:4444/wd/hub"
wd, err := selenium.NewRemote(caps, "http://127.0.0.1:9515/wd/hub")
if err != nil {
panic(err)
}
//延迟退出chrome
defer wd.Quit()
//3.对页面元素进行操作
//获取百度页面
if err := wd.Get("https://www.baidu.com/"); err != nil {
panic(err)
}
//找到百度输入框id
we, err := wd.FindElement(selenium.ByID, "kw")
if err != nil {
panic(err)
}
//向输入框发送“”
err = we.SendKeys("落花流水春去也")
if err != nil {
panic(err)
}
//找到百度提交按钮id
we, err = wd.FindElement(selenium.ByID, "su")
if err != nil {
panic(err)
}
//点击提交
err = we.Click()
if err != nil {
panic(err)
}
//睡眠20秒后退出
time.Sleep(20 * time.Second)
}
selenium使用起来整体感觉还是不错的,但是需要配置chromedriver这个驱动,而且这个驱动不同版本的的chrome还不一样,使用起来还是不太方便,于是便有了下面这种方式
Golang使用chromedp
获取方式:
go get -u github.com/chromedp/chromedp
先来个简单demo
func TestDb(t *testing.T) {
opts := append(chromedp.DefaultExecAllocatorOptions[:],
chromedp.Flag("headless", false),
chromedp.Flag("enable-automation", false),
)
allocCtx, _ := chromedp.NewExecAllocator(context.Background(), opts...)
ctx, _ := chromedp.NewContext(
allocCtx,
chromedp.WithLogf(log.Printf),
)
_ = chromedp.Run(ctx, chromedp.Tasks{
chromedp.Navigate("https://www.baidu.com/"),
chromedp.SendKeys("//*[@id=\"kw\"]", "落花流水春去也", chromedp.BySearch),
})
}
chromedp不需要配置chromedriver,并且是以task的方式来排版任务。
最后,使用chromedp切换窗口使用的是下面这个方法
func ActivateTarget(targetID ID) *ActivateTargetParams {}
至于其它的使用网上挺多内容的,就不赘述了。
版权声明:本文为wangshun_410原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。