1. 项目地址:
    https://github.com/tebeka/selenium

  2. 用法:

    1. 下载 chromedriver:
      https://sites.google.com/a/chromium.org/chromedriver/
    2. 将 chromedriver 可执行文件放到 path下(略):
    3. 代码:
       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))
       }
文档更新时间: 2024-03-24 15:25   作者:lee