日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

經(jīng)驗拾憶(純手工)=> Python版-Docker使用selenium簡單

系統(tǒng) 2156 0

Dockerfile內(nèi)容如下

          
            FROM python
RUN pip install -i http://pypi.douban.com/simple \
    requests selenium retrying --trusted-host pypi.douban.com
          
        

docker-compose.yaml內(nèi)容如下

          
            version: "3.7"
services:
  myspider:
    build: .
    volumes:  # 數(shù)據(jù)卷映射
      - /root/mycode:/root/mycode
    command: python /root/mycode/1.py
    # 依賴下方 selenium服務(wù),注意此依賴僅僅能做到
    # selenium服務(wù)先啟動, myspider服務(wù)后啟動(有的服務(wù)內(nèi)部程序啟動的快,有的慢)
    # 根本程度上還是解決不了 完全依賴 的 問題, 因此可以用延時處理等方法
    depends_on:
      - selenium
  selenium:
    image: selenium/standalone-chrome # 拉取鏡像完成自動化全套配置
    ports:
      - "4444:4444"
    shm_size: 2g  # 設(shè)置主機共享內(nèi)存2g
    hostname: selenium    # 其他容器可以用此名來訪問 eg: http://selenium:4444/

          
        

爬蟲腳本代碼1.py如下

          
            import requests
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.chrome.options import Options
from retrying import retry

# 注:docker-compose.yaml中的depends_on那里提到過:
# 服務(wù)可以起到先后依賴的效果。
# 而服務(wù)中的啟動程序,并不能達到完全的依賴(啟動速度相當?shù)那闆r下,誰快誰慢運氣成分)

# 可以通過加延時來控制先后順序
# import time    
# time.sleep(3)    # 這種睡眠延時方式,或多或少不太精確,可以用下面的 retrying代替之

# 也可以通過 retrying模塊裝飾實現(xiàn)
# retrying用法,可參考  https://segmentfault.com/a/1190000019301761#articleHeader17
@retry(
    stop_max_attempt_number = 10000,
    stop_max_delay = 10*1000,
)
def verify_request():
    response = requests.get("http://selenium:4444", timeout=0.5)
    print(response)
verify_request()

# 下面基本上是連接Docker Selenium服務(wù)的固定寫法,可當作模板套
options = Options()
options.add_argument('--headless')
with webdriver.Remote(
    command_executor='http://selenium:4444/wd/hub',   # selenium為docker-compose的host名
    desired_capabilities=DesiredCapabilities.CHROME,
    options=options
) as driver:
    driver.get('http://www.baidu.com')
    # 這里使用絕對路徑, 否則數(shù)據(jù)卷映射失敗
    # 映射部分在上面 docker-compose.yaml 的 volumes部分
    with open('/root/mycode/test.html', 'w') as f:    
        f.write(driver.page_source)
        print('寫入成功')

          
        

踩坑

          
            selenium 因為有服務(wù)端程序,所以我們可以在遠程"云服務(wù)器用Docker容器部署"
容器部署后。。。。
"只能云服務(wù)器中訪問,
不能在遠程服務(wù)器訪問。
(
    其實根本不需要在遠程服務(wù)器訪問的,某種邪惡的念頭,讓我走了彎路。。。一根筋想要遠程訪問
    其實代碼同是部署在容器中的,容器互通是完全OK的。
    但如果你也想試試遠程訪問, 它卻真的無法訪問。。。。。。。。。。。
)"

(
    我的認知里,既然云服務(wù)器宿主機可以訪問容器內(nèi)部 啟動的服務(wù)端程序 
    而遠程服務(wù)器不能訪問容器內(nèi)部的  啟動的服務(wù)端程序。。。。那一定是容器和宿主機連通配置問題阿。
    帶著這個思路,找了很久很久, 然并卵。。。
)

實在沒辦法了。。科學(xué)上網(wǎng),搜一下這個問題的解決方案吧。
后來無意中發(fā)現(xiàn),客戶端現(xiàn)在居然可以連上了。。 
后來測試,哇, 果然是 需要科學(xué)上網(wǎng)才能 遠程訪問到,此服務(wù)端。。。

但我現(xiàn)在還沒有明白,為什么我云服務(wù)器宿主機, 不需要科學(xué)上網(wǎng),也能成功訪問內(nèi)部容器的服務(wù)端??
(雖然這個疑惑沒有必要)
          
        

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 蚌埠市| 虹口区| 长阳| 嘉黎县| 林西县| 武功县| 丰台区| 乾安县| 乌拉特后旗| 慈溪市| 永州市| 巨野县| 上犹县| 杭州市| 黄陵县| 得荣县| 呼玛县| 仁布县| 鄄城县| 江安县| 大洼县| 麻江县| 延安市| 疏勒县| 晋江市| 临沭县| 双流县| 普宁市| 六盘水市| 夏河县| 台南市| 桃园市| 榆树市| 柯坪县| 乳源| 大新县| 焦作市| 孟连| 东乌珠穆沁旗| 内江市| 沂水县|