Jadual Kandungan
问题内容
解决方法
Rumah pembangunan bahagian belakang 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)

}
Salin selepas log masuk

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

docker pull selenium/standalone-chrome
Salin selepas log masuk

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

docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome
Salin selepas log masuk

运行命令时 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
Salin selepas log masuk

在 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": ""}}
Salin selepas log masuk

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

解决方法

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

chromeCaps := chrome.Capabilities{
    Args: []string{
        "--headless",
    },
    W3C: true,
}
Salin selepas log masuk

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

警告 [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 引入了重大更改。

Atas ialah kandungan terperinci Golang Docker Selenium Chrome. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Sambungan Python dan WebDriver: simulasi operasi roda tetikus dalam halaman web Sambungan Python dan WebDriver: simulasi operasi roda tetikus dalam halaman web Jul 09, 2023 pm 11:55 PM

Sambungan Python dan WebDriver: Mensimulasikan operasi roda tetikus dalam halaman web Pengenalan: Dengan pembangunan berterusan reka bentuk interaksi web, simulasi operasi pengguna telah menjadi semakin penting dalam ujian automatik. Pada sesetengah halaman web, penggunaan roda tetikus telah menjadi salah satu operasi biasa. Walau bagaimanapun, bagi pembangun yang menggunakan Python untuk menulis skrip ujian automatik, cara mensimulasikan operasi roda tetikus dalam WebDriver boleh menjadi satu cabaran. Artikel ini akan memperkenalkan kaedah menggunakan Python dan WebDriv

Gunakan Python dan WebDriver untuk menangkap halaman web dan menyimpannya sebagai fail PDF Gunakan Python dan WebDriver untuk menangkap halaman web dan menyimpannya sebagai fail PDF Jul 08, 2023 pm 10:55 PM

Gunakan Python dan WebDriver untuk tangkapan skrin halaman web dan simpannya sebagai fail PDF Ringkasan: Semasa pembangunan dan ujian web, selalunya perlu untuk tangkapan skrin halaman web untuk analisis, rakaman dan pelaporan. Artikel ini akan memperkenalkan cara menggunakan Python dan WebDriver untuk mengambil tangkapan skrin halaman web dan menyimpan tangkapan skrin sebagai fail PDF untuk perkongsian dan pengarkiban yang mudah. 1. Pasang dan konfigurasikan SeleniumWebDriver: Pasang Python: Lawati tapak web rasmi Python (https:

Gunakan Python dan WebDriver untuk mengisi kod pengesahan pada halaman web secara automatik Gunakan Python dan WebDriver untuk mengisi kod pengesahan pada halaman web secara automatik Jul 07, 2023 am 10:19 AM

Gunakan Python dan WebDriver untuk mengisi kod pengesahan secara automatik pada halaman web Dengan perkembangan Internet, semakin banyak tapak web telah memperkenalkan mekanisme kod pengesahan dalam pendaftaran pengguna, log masuk dan operasi lain untuk meningkatkan keselamatan dan mencegah serangan automatik. Walau bagaimanapun, memasukkan kod pengesahan secara manual bukan sahaja menyusahkan, tetapi juga meningkatkan kerumitan pengalaman pengguna. Jadi, adakah cara untuk mengisi kod pengesahan secara automatik? Jawapannya ya. Artikel ini akan memperkenalkan cara menggunakan Python dan WebDriver untuk mengisi kod pengesahan pada halaman web secara automatik. Pertama sekali, saya

Menggunakan Python dan WebDriver untuk memuat semula halaman web secara automatik Menggunakan Python dan WebDriver untuk memuat semula halaman web secara automatik Jul 08, 2023 pm 01:46 PM

Menggunakan Python dan WebDriver untuk melaksanakan penyegaran halaman web automatik Pengenalan: Dalam penyemakan imbas web harian, kami sering menghadapi senario yang memerlukan penyegaran halaman web yang kerap, seperti memantau data masa nyata, menyegarkan halaman dinamik secara automatik, dsb. Muat semula halaman web secara manual akan membuang banyak masa dan tenaga, jadi kami boleh menggunakan Python dan WebDriver untuk melaksanakan fungsi menyegarkan halaman web secara automatik dan meningkatkan kecekapan kerja kami. 1. Persekitaran pemasangan dan konfigurasi Sebelum bermula, kita perlu memasang dan mengkonfigurasi persekitaran yang sepadan. Pasang Python

Menggunakan Python dan WebDriver untuk mengisi data jadual secara automatik pada halaman web Menggunakan Python dan WebDriver untuk mengisi data jadual secara automatik pada halaman web Jul 07, 2023 pm 08:37 PM

Menggunakan Python dan WebDriver untuk mengisi data borang secara automatik pada halaman web adalah bahagian penting dalam proses pembangunan perisian Salah satu daripadanya ialah pengisian borang web secara automatik. Bagi pembangun, mengisi borang secara manual adalah proses yang membosankan dan terdedah kepada ralat. Menggunakan Python dan WebDriver untuk mengisi data jadual secara automatik semasa proses ujian automatik boleh mengurangkan pertindihan kerja secara manual dan meningkatkan kecekapan ujian. Dalam artikel ini, saya akan memperkenalkan cara menggunakan Selenium dengan Python

Sambungan Python dan WebDriver: simulasi klik kanan tetikus dalam halaman web Sambungan Python dan WebDriver: simulasi klik kanan tetikus dalam halaman web Jul 07, 2023 am 11:22 AM

Sambungan Python dan WebDriver: Simulasikan klik tetikus klik kanan pada halaman web Apabila menggunakan Python dan WebDriver untuk ujian halaman web automatik, kita selalunya perlu mensimulasikan gelagat tetikus pengguna, seperti klik, seret dan operasi menu klik kanan. WebDriver akan menyediakan beberapa fungsi tindakan tetikus asas, seperti klik, drag_and_drop, dsb., tetapi ia tidak secara langsung menyediakan fungsi untuk mensimulasikan klik kanan tetikus. Artikel ini akan memperkenalkan cara menggunakan Python dan WebD

Gunakan sambungan Python dan WebDriver untuk mengautomasikan operasi drag-and-drop pada halaman web Gunakan sambungan Python dan WebDriver untuk mengautomasikan operasi drag-and-drop pada halaman web Jul 10, 2023 pm 07:09 PM

Gunakan sambungan Python dan WebDriver untuk mengautomasikan operasi drag-and-drop halaman web Dalam aplikasi web sebenar, drag-and-drop (Seret dan Lepas) ialah operasi interaktif biasa, yang boleh meningkatkan pengalaman dan kemudahan pengguna. Mengautomasikan operasi drag-and-drop untuk halaman web ialah tugas penting dan biasa untuk penguji. Artikel ini akan memperkenalkan cara menggunakan sambungan Python dan WebDriver untuk mengautomasikan operasi drag-and-drop pada halaman web. 1. Persediaan Sebelum bermula, kita perlu memasang Pyt

Menggunakan Python dan WebDriver untuk melaksanakan fungsi pengisian automatik borang Menggunakan Python dan WebDriver untuk melaksanakan fungsi pengisian automatik borang Jul 07, 2023 am 10:25 AM

Menggunakan Python dan WebDriver untuk melaksanakan fungsi pengisian automatik borang Dalam penyemakan imbas laman web harian, kita sering menghadapi situasi di mana kita perlu mengisi borang. Apabila kita perlu mengisi borang yang sama atau serupa dengan kerap, pengisian manual menjadi membosankan dan memakan masa. Nasib baik, kami boleh menggunakan Python dan WebDriver untuk merealisasikan fungsi mengisi borang secara automatik dan meningkatkan kecekapan kerja kami. Pertama, kita perlu memasang perpustakaan selenium. Selenium ialah alat ujian automatik yang boleh mensimulasikan

See all articles