Как сохранить в формате PDF в селене - PullRequest
0 голосов
/ 25 марта 2020
package main

import (
    "github.com/tebeka/selenium"
    "github.com/tebeka/selenium/chrome"
    "strconv"
    "time"
)

func Enabled(by, elementName string) func(selenium.WebDriver) (bool, error) {
    return func(wd selenium.WebDriver) (bool, error) {
        el, err := wd.FindElement(by, elementName)
        if err != nil {
            return false, nil
        }
        enabled, err := el.IsEnabled()
        if err != nil {
            return false, nil
        }
        if !enabled {
            return false, nil
        }
        return true, nil
    }
}

func main() {
    const (
        chromePath    = "./chromedriver.exe"
        port            = 8080
    )
    service, err := selenium.NewChromeDriverService(chromePath, port)
    if err != nil {
        panic(err) 
    }
    defer service.Stop()
    type M map[string]string
    var rd []M
    rdData := M{
        "id": "Save as PDF",
        "origin": "local",
        "account": "",
    }
    rd = append(rd, rdData)
    settings := map[string]interface{}{
        "recentDestinations": rd,
        "selectedDestinationId": "Save as PDF",
        "version": 2,
    }
    pref := map[string]interface{}{
        "printing.print_preview_sticky_settings.appState": settings,
        "savefile.default_directory": `C:\Users\user\Desktop`,
    }

    chromeCaps := chrome.Capabilities{
        Prefs: pref,
        Path: "",
        Args: []string{
            "--kiosk-printing",
        },
    }

    opts := []selenium.ServiceOption{}
    caps := selenium.Capabilities{
        "browserName" : "chrome",
    }
    caps.AddChrome(chromeCaps)
    _, err = selenium.NewChromeDriverService(chromePath, port, opts...)
    if err != nil {
        panic(err)
    }

    wd, err := selenium.NewRemote(caps, "http://127.0.0.1:"+strconv.Itoa(port)+"/wd/hub")
    if err != nil {
        panic(err)
    }
    defer wd.Quit()

    if err := wd.Get("<some url>"); err != nil {
        panic(err)
    }
    err = wd.WaitWithTimeout(Enabled(selenium.ByCSSSelector, "<some css_selector>"), 10 * time.Second)
    if err != nil {
        panic(err)
    }
    wd.ExecuteScript("window.print();", nil)
}

это мой полный исходный код.

Я запустил программу, используя этот исходный код, и результат был до тех пор, пока не была нажата кнопка сохранения, но было подтверждено, что она была установлена ​​на другой принтер устройство вместо «сохранить как PDF».

Интересно, установлено ли значение Capabilities неправильно или в пакете имеется ошибка. Мне также интересно, как сохранить его в формате PDF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...