Golang使用selenium、chromedp操作Chrome

  • Post author:
  • Post category:golang


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 版权协议,转载请附上原文出处链接和本声明。