最近爬虫遇到了反爬策略较高的站点,通过百度了解到 selenium + chrome。
开始想着自己搭建环境,即 java + selectnium + chrome + chrome_driver。在搭建的过程中发现在兼容chrome的时候坑多, 最终放弃并选择了docker
# 搜索镜像 docker search 镜像名称 docker search selenium # selenium/base: 包括 Selenium Server Jar包的基础镜像 # selenium/hub: Selenium Grid Hub 节点 # selenium/node-base: Selenium Node 节点的基础镜像 # selenium/node-chrome: 安装有 Chrome 的 Selenium Node 节点镜像 # selenium/node-firefox: 安装有 Firefox 的 Selenium Node 节点镜像 # selenium/node-chrome-debug: 安装有 Chrome 的 Selenium Node 节点镜像,包含远程桌面 # selenium/node-firefox-debug: 安装有 Firefox 的 Selenium Node 节点镜像,包含远程桌面 # selenium/standalone-chrome: 安装有 Chrome,独立运行的 Selenium # selenium/standalone-firefox: 安装有 Firefox,独立运行的 Selenium # selenium/standalone-chrome-debug: 安装有 Chrome,独立运行的 Selenium,包含远程桌面 # selenium/standalone-firefox-debug: 安装有 Firefox,独立运行的 Selenium,包含远程桌面 # 在列表中找到想用的版本 我选择 selenium/standalone-chrome docker pull selenium/standalone-chrome # 启动容器 docker run -d --name chrome -p 4444:4444 --shm-size="2g" selenium/standalone-chrome # -d 后台运行容器 # --name 给运行的容器命名 # -p 宿主机暴露端口:映射到容器内部的端口 # --shm-size="分配给容器的内存" # 容器运行起来后,用facebook团队开发的 php-webdriver # 进入项目目录 cd your_project_path # 安装 php-webdriver composer require php-webdriver/webdriver # 安装后使用教程可参考 https://github.com/php-webdriver/php-webdriver
# 在使用过程中,遇到docker 不可访问外网 # 检查ip转发是否打开 sysctl net.ipv4.ip_forward # 输出 net.ipv4.ip_forward=0 # 或者运行 cat /proc/sys/net/ipv4/ip_forward # 输出 0 则表示ip转发未打开 # 临时打开ip转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 永久打开ip转发 vim /etc/sysctl.conf # 修改 net.ipv4.ip_forward = 1 # 修改后可以重启系统来使修改生效,也可以执行下面的命令来使修改生效: sysctl -p /etc/sysctl.conf
后续有遇到问题再来更新,各路大神可以在评论指出不足,或者一起探讨