Selenium是一个用于Web应用程序测试的工具。
Selenium是web 浏览器自动化的一个工具集,所以机器中本身需要安装好Chrome浏览器,在设置
> 关于Chrome
中可以看到浏览器的版本号
根据大版本号108
下载相应的ChromeDriver,下载驱动,比如ChromeDriver 108.0.5359.71
,需要注意的是驱动的大版本号要与浏览器的大版本号保持一致,否则后续使用Selenium运行程序的时候,会因为驱动版本问题,导致失败。
--user-data-dir
note:如果仅仅是个人测试使用,建议将chrome的用户数据目录拷贝一份,避免共用数据导致各种各样的问题
--proxy-server
--no-sandbox
--incognito
--disable-infobars
--headless
--start-maximized
--disable-gpu
浏览器地址栏访问chrome://chrome-urls,可以看到chrome内置的网址列表,其中chrome://version可以能看到浏览器的版本信息,对我们开发来说还是非常有用的,用户数据目录路径,版本号。。。
package mainimport ("fmt""github.com/tebeka/selenium""github.com/tebeka/selenium/chrome"
)func main() {port := 19999 // 指定工具运行的浏览器所占用端口,当然也可以用动态端口的形式chromeExe := `E:\workspace\chromedriver.exe` // ChromeDriver驱动的目录service, err := selenium.NewChromeDriverService(chromeExe, port) if err != nil {fmt.Printf("new chrome driver service err: %s\n", err)return}defer service.Stop()// 设置浏览器兼容性caps := selenium.Capabilities{"browserName": "chrome", }caps.AddProxy(selenium.Proxy{Type: selenium.Manual,HTTP: "127.0.0.1",HTTPPort: 7890,})caps.AddChrome(chrome.Capabilities{Args: []string{`--no-sandbox`,"--incognito",`--disable-gpu`,`--user-data-dir=E:\workspace\User Data`, // 用户数据目录路径,这是拷贝出来的一份真实的数据},})webDriver, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port))if err != nil {fmt.Printf("new web driver err: %s\n", err)return}//defer webDriver.Quit() // 退出浏览器uris := []string{"https://www.google.com", "https://www.baidu.com"}for idx, uri := range uris {if idx == 0 {if err = webDriver.Get(uri); err != nil {fmt.Printf("get [%s] err: %s\n", uri, err)continue}continue}// 用新标签页打开页面if _, err = webDriver.ExecuteScriptAsync(fmt.Sprintf(`window.open('%s')`, uri), []interface{}{}); err != nil {fmt.Printf("open [%s] err: %s\n", uri, err)continue}}return
}
上面这段代码主要是通过Selenium Chrome驱动,以无痕模式,指定用户数据目录配置,访问google,再异步执行脚本,用新标签页访问baidu,效果图如下
能看到Chrome 无痕窗口打开了两个网页,因为指定了--user-data-dir
,所以能看到浏览器安装了不少扩展插件,及书签等数据都在。浏览器左上方有“Chrome正受到自动化测试软件的控制” 的提示,可以设置--disable-infobars
来关闭
从他人的工作中汲取经验来避免自己的错误重复,正如我们是站在巨人的肩膀上才能做出更好的成绩。
https://github.com/tebeka/selenium
https://peter.sh/experiments/chromium-command-line-switches/
https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md
https://chromium.googlesource.com/chromium/src/+/master/chrome/common/chrome_switches.cc
https://blog.51cto.com/u_9406836/2499426
一个没有哆啦A梦和静香的IT码农,不专业Gopher
上一篇:用一年时间脱胎换骨
下一篇:20230210组会论文总结