Попробуйте Go Selenium | Месяц тем Go

Go Selenium
Попробуйте Go Selenium | Месяц тем Go

Друзья, которые пишут краулеры, должны знать об автоматизации браузеров, таких как Selenium или Puppeteer, Среди них я больше использую Selenium, инструмент для тестирования веб-приложений. Selenium-тесты запускаются прямо в браузере, как настоящий пользователь. Итак, мы будем использовать Selenium, чтобы имитировать работу пользователя с браузером для сканирования данных.

Языком разработки, который использовался ранее, был Python, давайте сегодня попробуем Go selenium.

Установить

В настоящее время одна из зависимых библиотек, которые я использую,GitHub.com/Special Hungry Cards/Сэйлор…, функция более полная и находится на обслуживании.

go get -t -d github.com/tebeka/selenium

Кроме того, нам необходимо установить для разных типов браузеровWebDriver, Google Chrome должен быть установленChromeDriver, Firefox должен быть установленgeckodriver.

кейс

Здесь мы используем Google Chrome, нам сначала нужно указать расположение ChromeDriver и запустить сервер WebDriver, а затем мы можем начать работу с браузером.

package main

import (
    "fmt"
    "os"
    "strings"
    "time"

    "github.com/tebeka/selenium"
)

const (
    chromeDriverPath = "/path/to/chromedriver"
    port             = 8080
)

func main() {
    // Start a WebDriver server instance
    opts := []selenium.ServiceOption{
        selenium.Output(os.Stderr),            // Output debug information to STDERR.
    }
    selenium.SetDebug(true)
    service, err := selenium.NewChromeDriverService(chromeDriverPath, port, opts...)
    if err != nil {
        panic(err) // panic is used only as an example and is not otherwise recommended.
    }
    defer service.Stop()

    // Connect to the WebDriver instance running locally.
    caps := selenium.Capabilities{"browserName": "chrome"}
    wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port))
    if err != nil {
        panic(err)
    }
    defer wd.Quit()

    // Navigate to the simple playground interface.
    if err := wd.Get("http://play.golang.org/?simple=1"); err != nil {
        panic(err)
    }

    // Get a reference to the text box containing code.
    elem, err := wd.FindElement(selenium.ByCSSSelector, "#code")
    if err != nil {
        panic(err)
    }
    // Remove the boilerplate code already in the text box.
    if err := elem.Clear(); err != nil {
        panic(err)
    }

    // Enter some new code in text box.
    err = elem.SendKeys(`
        package main
        import "fmt"
        func main() {
            fmt.Println("Hello WebDriver!")
        }
    `)
    if err != nil {
        panic(err)
    }

    // Click the run button.
    btn, err := wd.FindElement(selenium.ByCSSSelector, "#run")
    if err != nil {
        panic(err)
    }
    if err := btn.Click(); err != nil {
        panic(err)
    }

    // Wait for the program to finish running and get the output.
    outputDiv, err := wd.FindElement(selenium.ByCSSSelector, "#output")
    if err != nil {
        panic(err)
    }

    var output string
    for {
        output, err = outputDiv.Text()
        if err != nil {
            panic(err)
        }
        if output != "Waiting for remote server..." {
            break
        }
        time.Sleep(time.Millisecond * 100)
    }

    fmt.Printf("%s", strings.Replace(output, "\n\n", "\n", -1))

    // Example Output:
    // Hello WebDriver!
    //
    // Program exited.
}

Суммировать

Его не очень сложно использовать, но не похоже, что Go Selenium очень популярен,GitHub.com/Special Hungry Cards/Сэйлор…Количество звезд на GitHub всего 1к+.