selenium 裸安装备忘

  • 因为弄的standalone-chrome-debug,chrome老是崩溃,愤而裸机安装。
  • 因为裸机安装的hub/standalone或者hub/node,chromedriver启动的chrome老是黑屏,愤而用容器的node。
  • 用容器的node,依旧会chrome崩溃

由于上述几个原因,我在本机安装了 selenium,希望能更了解一些selenium,便有了本文。虽然最后我从其他地方解决了遇到的问题,这篇文章也就没有了实际意义,但还是记录下来。

一、安装java

selenium官方没有说明java使用的版本,我决定使用最新的版本。

image-20211214161118210

二、安装Selenium Grid

image-20211214163037163

三、安装chrome和chrome driver

四、4种不同的方式运行Grid

  • Standalone

    java -jar selenium-server-<version>.jar standalone
    java -jar selenium-server-4.1.0.jar standalone --host 0.0.0.0 --port 4445
    
  • Hub and Node

    java -jar selenium-server-4.1.0.jar hub --host 0.0.0.0 --port 4445
    java -jar selenium-server-4.1.0.jar node
    java -jar selenium-server-4.1.0.jar node --detect-drivers true --publish-events tcp://127.0.0.1:4442 --subscribe-events tcp://127.0.0.1:4443
    

    hub/node 用容器化的方式弄

    docker pull selenium/hub:4.1.0
    docker pull selenium/node-chrome:96.0
    
      node-chrome:
        image: selenium/node-chrome:96.0
        restart: always
        network_mode: bridge
        container_name: node-chrome
        ports:
          - "5901:5900"
        environment:
          SE_EVENT_BUS_HOST: 192.168.1.133
          SE_EVENT_BUS_PORT: 4445
          SE_EVENT_BUS_PUBLISH_PORT: 4442
          SE_EVENT_BUS_SUBSCRIBE_PORT: 4443
          NODE_MAX_SESSION: 4
          NODE_MAX_INSTANCES: 4
    
  • Distributed

  • Docker

访问地址:http://localhost:4445/

image-20211214171806096

chrome 崩溃

https://developers.google.com/web/tools/puppeteer/troubleshooting#tips

默认情况下,Docker 运行一个/dev/shm共享内存空间为 64MB的容器。这对于 Chrome来说 通常太小,并且会导致 Chrome 在渲染大页面时崩溃。

要修复,请运行容器 docker run --shm-size=1gb以增加/dev/shm.

从 Chrome 65 开始可以使用--disable-dev-shm-usage标志启动浏览器。这会将共享内存文件写入/tmp而不是/dev/shm.

const browser = await puppeteer.launch({
  args: ['--disable-dev-shm-usage'],
});

尤其是如果你的容器需要跑在kubernetes上,最好还是以添加参数--disable-dev-shm-usage 这种方式运行了。


Nginx 流速限制 增加docker的shm(共享内存)大小