最近爬蟲遇到了反爬策略較高的站點,通過百度了解到 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
后續有遇到問題再來更新,各路大神可以在評論指出不足,或者一起探討