项目地址:
https://github.com/tebeka/selenium
用法:
- 下载 chromedriver:
https://sites.google.com/a/chromium.org/chromedriver/
- 将 chromedriver 可执行文件放到 path下(略):
- 代码:
package main import ( "fmt" "github.com/tebeka/selenium" "github.com/tebeka/selenium/chrome" "strings" "time" ) func showError(err error, msg string) { if err != nil { fmt.Println("msg: "+msg+". error:", err) } } func main() { const ( seleniumPath = "/usr/local/bin/chromedriver" port = 8080 baseUrl = "http://play.golang.org/?simple=1" ) selenium.SetDebug(false) service, err := selenium.NewChromeDriverService(seleniumPath, port) showError(err, "selenium.NewChromeDriverService(seleniumPath, port)") defer service.Stop() caps := selenium.Capabilities{"browserName": "chrome"} imagCaps := map[string]interface{}{ "profile.managed_default_content_settings.images": 2, } chromeCaps := chrome.Capabilities{ Prefs: imagCaps, Path: "", Args: []string{ //"--headless", // 设置Chrome无头模式 "--no-sandbox", "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7", // 模拟user-agent,防反爬 }, } caps.AddChrome(chromeCaps) wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port)) showError(err, "selenium.NewRemote(caps...") defer wd.Quit() err = wd.Get(baseUrl) showError(err, "wd.Get(baseUrl)") elem, err := wd.FindElement(selenium.ByCSSSelector, "#code") showError(err, "wd.FindElement") err = elem.Clear() showError(err, "elem.Clear()") err = elem.SendKeys(` package main import "fmt" func main() { fmt.Println("Hello lee!\n") } `) showError(err, "elem.SendKeys") btn, err := wd.FindElement(selenium.ByCSSSelector, "#run") showError(err, "wd.FindElement...[#run]") err = btn.Click() showError(err, "btn.Click()") outputDiv, err := wd.FindElement(selenium.ByCSSSelector, ".Playground-outputContainer") showError(err, "wd.FindElement...[.Playground-outputContainer]") var output string for { output, err = outputDiv.Text() showError(err, "outputDiv.Text()") if output != "Waiting for remote server..." { break } time.Sleep(time.Millisecond * 100) } fmt.Printf("%s", strings.Replace(output, "\n\n", "\n", -1)) }
- 下载 chromedriver:
文档更新时间: 2024-03-24 15:25 作者:lee