selenium 裸安装备忘
2021-12-15 tech selenium chromedriver 6 mins 3 图 2302 字
- 因为弄的standalone-chrome-debug,chrome老是崩溃,愤而裸机安装。
- 因为裸机安装的hub/standalone或者hub/node,chromedriver启动的chrome老是黑屏,愤而用容器的node。
- 用容器的node,依旧会chrome崩溃
由于上述几个原因,我在本机安装了 selenium,希望能更了解一些selenium,便有了本文。虽然最后我从其他地方解决了遇到的问题,这篇文章也就没有了实际意义,但还是记录下来。
一、安装java
selenium官方没有说明java使用的版本,我决定使用最新的版本。
- https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
-
https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.deb
- Linux系统安装Java环境
- 如何在Debian 10上安装Oracle Java(Buster)
二、安装Selenium Grid
- https://www.browserstack.com/guide/selenium-grid-tutorial
- https://www.selenium.dev/documentation/grid/getting_started/
- https://www.browserstack.com/guide/selenium-grid-4-tutorial
- https://www.swtestacademy.com/selenium-4-grid-standalone-tutorial/
- Selenium 不同版本的区别
三、安装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
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
这种方式运行了。