Inhaltsverzeichnis
问题内容
解决方法
Heim Backend-Entwicklung Golang Golang Docker Selenium Chrome

Golang Docker Selenium Chrome

Feb 10, 2024 pm 01:30 PM
webdriver

Golang Docker Selenium Chrome

Golang Docker Selenium Chrome是一种强大的组合,为开发人员提供了便捷且高效的工具链。Golang是一种高性能的编程语言,具有简洁的语法和强大的并发性能。Docker是一种容器化技术,可以将应用程序与其依赖项打包成一个独立的运行环境。Selenium是一个自动化测试工具,可以模拟用户在浏览器中的操作。而Chrome是一款流行的Web浏览器。通过结合使用这些工具,开发人员可以更方便地进行Web应用程序的开发和测试。在本文中,我们将深入探讨如何使用Golang Docker Selenium Chrome来加速开发过程,并分享一些实用技巧和最佳实践。

问题内容

我在 golang 中有一个 api,它尝试连接到在 docker 镜像中运行的 selenium 服务器:

package main

import (
    "fmt"
    "time"

    "github.com/tebeka/selenium"
    "github.com/tebeka/selenium/chrome"
)

func main() {
    // configuração webdriver (simulador)
    caps := selenium.capabilities{
        "browsername": "chrome", "browserversion": "114.0", "se:novncport": 7900, "se:vncenabled": true,
    }

    chromecaps := chrome.capabilities{
        args: []string{
            "--headless",
        },
    }
    caps.addchrome(chromecaps)

    // iniciando o servidor, conectado ao eu webdriver que esta rodando
    wd, err := selenium.newremote(caps, "http://localhost:4444/wd/hub")
    if err != nil {
        fmt.printf("falha ao iniciar o servidor selenium: %s\n", err.error())
        return
    }
    defer wd.quit()
    time.sleep(10 * time.second)

    // inicia a pagina inicial kk
    err = wd.get("https://www.csonline.com.br/")
    if err != nil {
        fmt.printf("falha ao abrir a página de login: %s\n", err.error())
        return
    }

    time.sleep(10 * time.second)

    // selecionar o elemento por id
    usernamefield, err := wd.findelement(selenium.byid, "dfgd")
    if err != nil {
        fmt.printf("falha ao encontrar o campo de usuário: %s\n", err)
        return
    }

    //populando os campos, ai é só repetir os passos
    err = usernamefield.sendkeys("dfglkdf)
    if err != nil {
        fmt.printf("falha ao preencher o campo de usuário: %s\n", err.error())
    }

    passwordfield, err := wd.findelement(selenium.byid, "dfg")
    if err != nil {
        fmt.printf("falha ao encontrar o campo de senha: %s\n", err.error())
    }

    err = passwordfield.sendkeys("dlfknvkxjcn ")
    if err != nil {
        fmt.printf("falha ao preencher o campo de senha: %s\n", err.error())
    }

    // envia o formulário de login
    loginbutton, err := wd.findelement(selenium.bycssselector, "#next")
    if err != nil {
        fmt.printf("falha ao encontrar o botão de login: %s\n", err.error())
    }
    err = loginbutton.click()
    if err != nil {
        fmt.printf("falha ao clicar no botão de login: %s\n", err.error())
    }
    fmt.println("sucess")

    //aguarda um tempo para realizar login
    time.sleep(10 * time.second)

    access, err := wd.findelement(selenium.byid, "btnselectlogin")
    if err != nil {
        fmt.printf("falha ao encontrar o botão de acesso: %s\n", err)

    }
    err = access.click()
    if err != nil {
        fmt.printf("falha ao clicar no botão de acesso: %s\n", err)

    }
    fmt.println("sucess")

    localstoragescript := `return localstorage.getitem("cs.token");`

    // execute o script no contexto do navegador
    localstoragedata, err := wd.executescript(localstoragescript, nil)
    if err != nil {
        fmt.println("falha ao obter dados do localstorage:", err)

    }

    // imprima os dados do localstorage
    fmt.println("bearer", localstoragedata)

}
Nach dem Login kopieren

我在docker中安装了selenium,如下所示:

docker pull selenium/standalone-chrome
Nach dem Login kopieren

我运行此命令在 docker 中启动 selenium:

docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome
Nach dem Login kopieren

运行命令时 go run main.go 我在 go 终端中收到此错误:

invalid session id: unable to execute request for an existing session: unable to find session with id: 
build info: version: '4.10.0', revision: 'c14d967899'
system info: os.name: 'linux', os.arch: 'amd64', os.version: '5.10.16.3-microsoft-standard-wsl2', java.version: '11.0.19'
driver info: driver.version: unknown
Nach dem Login kopieren

在 docker 中的 selenium 日志中我得到:

WARN [SeleniumSpanExporter$1.lambda$export$3] - {"traceId": "171e16c9402c8f85639418c7b458f388","eventTime": 1687963769139610379,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: Unable to find session with ID: \nBuild info: version: '4.10.0', revision: 'c14d967899'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.16.3-microsoft-standard-WSL2', java.version: '11.0.19'\nDriver info: driver.version: unknown","exception.stacktrace": "org.openqa.selenium.NoSuchSessionException: Unable to find session with ID: \nBuild info: version: '4.10.0', revision: 'c14d967899'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.16.3-microsoft-standard-WSL2', java.version: '11.0.19'\nDriver info: driver.version: unknown\n\tat org.openqa.selenium.grid.sessionmap.local.LocalSessionMap.get(LocalSessionMap.java:137)\n\tat org.openqa.selenium.grid.router.HandleSession.lambda$loadSessionId$4(HandleSession.java:172)\n\tat io.opentelemetry.context.Context.lambda$wrap$2(Context.java:224)\n\tat org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:125)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:384)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:347)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.grid.router.Router.execute(Router.java:87)\n\tat org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:347)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:271)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:347)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:347)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:347)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:347)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:69)\n\tat org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:63)\n\tat org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:829)\n","exception.type": "org.openqa.selenium.NoSuchSessionException","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "localhost:4444","http.method": "POST","http.request_content_length": "38","http.scheme": "HTTP","http.target": "\u002fsession\u002f\u002furl","http.user_agent": "Go-http-client\u002f1.1","session.id": ""}}
Nach dem Login kopieren

为什么会发生这种情况?有人可以提供帮助吗?

解决方法

要使您的演示与 selenium/standalone-chrome:latest(目前为 selenium/standalone-chrome:4.10.0)一起使用,您需要将 w3c 设置为 true

chromeCaps := chrome.Capabilities{
    Args: []string{
        "--headless",
    },
    W3C: true,
}
Nach dem Login kopieren

如果你仔细查看容器的日志,你应该会看到类似这样的内容:

警告 [seleniumspanexporter$1.lambda$export$1] - org.openqa.selenium.sessionnotcreatedexception:无法启动新会话。与驱动程序服务创建会话时出错。停止驱动程序服务:无法启动新会话。握手响应与任何支持的协议不匹配。响应负载:{"sessionid":"4ef27eb4d2fbb1ebfe5cf2fb51df731b","status":33,"value":{"message":"会话未创建:缺少或无效的功能\n(驱动程序信息:chromedriver =114.0.5735.90 (386bc09e8f4f2e025eddae123f36f6263096ae49-refs/branch-heads/5735@{#1052}),platform=linux 5.19.0-43-通用 x86_64)"}}

这可能是由删除 json wire 协议支持引入的重大更改引起的,在 selenium 4.9.0 中提供。

我从演示中删除了 "browserversion": "114.0",然后针对 selenium/standalone-chrome:4.8.3selenium/standalone-chrome:4.9.0 进行了测试。结果是,它适用于 4.8.3,但不适用于 4.9.0。这至少证明 4.9.0 引入了重大更改。

Das obige ist der detaillierte Inhalt vonGolang Docker Selenium Chrome. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verwenden Sie Python und WebDriver, um Webseiten zu erfassen und als PDF-Dateien zu speichern Verwenden Sie Python und WebDriver, um Webseiten zu erfassen und als PDF-Dateien zu speichern Jul 08, 2023 pm 10:55 PM

Verwenden Sie Python und WebDriver, um Screenshots von Webseiten zu erstellen und diese als PDF-Dateien zu speichern. Zusammenfassung: Während der Webentwicklung und beim Testen ist es häufig erforderlich, Screenshots von Webseiten zur Analyse, Aufzeichnung und Berichterstellung zu erstellen. In diesem Artikel erfahren Sie, wie Sie mit Python und WebDriver Screenshots von Webseiten erstellen und die Screenshots zur einfachen Weitergabe und Archivierung als PDF-Dateien speichern. 1. Installieren und konfigurieren Sie SeleniumWebDriver: Installieren Sie Python: Besuchen Sie die offizielle Python-Website (https:

Python- und WebDriver-Erweiterung: Mausradoperationen auf Webseiten simulieren Python- und WebDriver-Erweiterung: Mausradoperationen auf Webseiten simulieren Jul 09, 2023 pm 11:55 PM

Python- und WebDriver-Erweiterung: Mausradoperationen auf Webseiten simulieren Einführung: Mit der kontinuierlichen Weiterentwicklung des Webinteraktionsdesigns ist die Simulation von Benutzeroperationen beim automatisierten Testen immer wichtiger geworden. Auf einigen Webseiten ist die Verwendung des Mausrads zu einer der üblichen Operationen geworden. Für Entwickler, die Python zum Schreiben automatisierter Testskripte verwenden, kann die Simulation von Mausradvorgängen in WebDriver jedoch zu einer Herausforderung werden. In diesem Artikel wird eine Methode vorgestellt, die Python und WebDrive verwendet

Verwenden Sie Python und WebDriver, um Bestätigungscodes auf Webseiten automatisch einzugeben Verwenden Sie Python und WebDriver, um Bestätigungscodes auf Webseiten automatisch einzugeben Jul 07, 2023 am 10:19 AM

Verwenden Sie Python und WebDriver, um Verifizierungscodes auf Webseiten automatisch einzugeben. Mit der Entwicklung des Internets haben immer mehr Websites Verifizierungscodemechanismen bei der Benutzerregistrierung, Anmeldung und anderen Vorgängen eingeführt, um die Sicherheit zu verbessern und automatisierte Angriffe zu verhindern. Allerdings ist die manuelle Eingabe des Verifizierungscodes nicht nur mühsam, sondern erhöht auch die Komplexität des Benutzererlebnisses. Gibt es also eine Möglichkeit, den Bestätigungscode automatisch einzugeben? Die Antwort ist ja. In diesem Artikel wird erläutert, wie Sie mithilfe von Python und WebDriver automatisch Bestätigungscodes auf Webseiten eingeben. Zunächst einmal: Ich

Verwenden von Python und WebDriver zum automatischen Aktualisieren von Webseiten Verwenden von Python und WebDriver zum automatischen Aktualisieren von Webseiten Jul 08, 2023 pm 01:46 PM

Verwenden von Python und WebDriver zum automatischen Aktualisieren von Webseiten Einführung: Beim täglichen Surfen im Internet stoßen wir häufig auf Szenarien, die häufige Aktualisierungen von Webseiten erfordern, z. B. die Überwachung von Echtzeitdaten, die automatische Aktualisierung dynamischer Seiten usw. Das manuelle Aktualisieren der Webseite verschwendet viel Zeit und Energie. Daher können wir Python und WebDriver verwenden, um die Funktion zum automatischen Aktualisieren der Webseite zu implementieren und unsere Arbeitseffizienz zu verbessern. 1. Installations- und Konfigurationsumgebung Bevor wir beginnen, müssen wir die entsprechende Umgebung installieren und konfigurieren. Installieren Sie Python

Python- und WebDriver-Erweiterung: Simulieren Sie rechte Mausklicks auf Webseiten Python- und WebDriver-Erweiterung: Simulieren Sie rechte Mausklicks auf Webseiten Jul 07, 2023 am 11:22 AM

Python- und WebDriver-Erweiterungen: Rechtsklick-Mausklicks auf Webseiten simulieren Wenn wir Python und WebDriver für automatisierte Webseitentests verwenden, müssen wir häufig das Mausverhalten von Benutzern simulieren, wie z. B. Klicken, Ziehen und Rechtsklick-Menüvorgänge. WebDriver bietet einige grundlegende Mausaktionsfunktionen wie Klicken, Ziehen und Ablegen usw., bietet jedoch nicht direkt eine Funktion, die einen rechten Mausklick simuliert. In diesem Artikel wird die Verwendung von Python und WebD vorgestellt

Verwenden von Python und WebDriver zum automatischen Ausfüllen von Tabellendaten auf Webseiten Verwenden von Python und WebDriver zum automatischen Ausfüllen von Tabellendaten auf Webseiten Jul 07, 2023 pm 08:37 PM

Die Verwendung von Python und WebDriver zum automatischen Ausfüllen von Formulardaten auf Webseiten ist ein wichtiger Teil des Softwareentwicklungsprozesses. Einer davon ist das automatische Ausfüllen von Webformularen. Für Entwickler ist das manuelle Ausfüllen von Formularen ein mühsamer und fehleranfälliger Prozess. Die Verwendung von Python und WebDriver zum automatischen Ausfüllen von Tabellendaten während des automatischen Testprozesses kann manuelle Doppelarbeit reduzieren und die Testeffizienz verbessern. In diesem Artikel werde ich die Verwendung von Selenium mit Python vorstellen

Verwenden Sie Python- und WebDriver-Erweiterungen, um Drag-and-Drop-Vorgänge auf Webseiten zu automatisieren Verwenden Sie Python- und WebDriver-Erweiterungen, um Drag-and-Drop-Vorgänge auf Webseiten zu automatisieren Jul 10, 2023 pm 07:09 PM

Verwenden Sie Python- und WebDriver-Erweiterungen, um den Drag-and-Drop-Vorgang von Webseiten zu automatisieren. In tatsächlichen Webanwendungen ist Drag-and-Drop (Drag-and-Drop) ein gängiger interaktiver Vorgang, der die Benutzererfahrung und den Komfort verbessern kann. Die Automatisierung von Drag-and-Drop-Vorgängen für Webseiten ist eine wichtige und häufige Aufgabe für Tester. In diesem Artikel wird erläutert, wie Sie mit Python- und WebDriver-Erweiterungen Drag-and-Drop-Vorgänge auf Webseiten automatisieren. 1. Vorbereitung Bevor wir beginnen, müssen wir Pyt installieren

Verwendung von Python und WebDriver zur Implementierung der Funktion zum automatischen Ausfüllen von Formularen Verwendung von Python und WebDriver zur Implementierung der Funktion zum automatischen Ausfüllen von Formularen Jul 07, 2023 am 10:25 AM

Verwendung von Python und WebDriver zur Implementierung der Funktion zum automatischen Ausfüllen von Formularen Beim täglichen Surfen auf Websites stoßen wir häufig auf Situationen, in denen wir Formulare ausfüllen müssen. Wenn wir häufig dieselben oder ähnliche Formulare ausfüllen müssen, wird das manuelle Ausfüllen mühsam und zeitaufwändig. Glücklicherweise können wir Python und WebDriver verwenden, um die Funktion des automatischen Ausfüllens von Formularen zu realisieren und unsere Arbeitseffizienz zu verbessern. Zuerst müssen wir die Selenium-Bibliothek installieren. Selenium ist ein automatisiertes Testtool, das simulieren kann

See all articles