亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 2147 0

Dockerfile內容如下

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

docker-compose.yaml內容如下

          
            version: "3.7"
services:
  myspider:
    build: .
    volumes:  # 數據卷映射
      - /root/mycode:/root/mycode
    command: python /root/mycode/1.py
    # 依賴下方 selenium服務,注意此依賴僅僅能做到
    # selenium服務先啟動, myspider服務后啟動(有的服務內部程序啟動的快,有的慢)
    # 根本程度上還是解決不了 完全依賴 的 問題, 因此可以用延時處理等方法
    depends_on:
      - selenium
  selenium:
    image: selenium/standalone-chrome # 拉取鏡像完成自動化全套配置
    ports:
      - "4444:4444"
    shm_size: 2g  # 設置主機共享內存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那里提到過:
# 服務可以起到先后依賴的效果。
# 而服務中的啟動程序,并不能達到完全的依賴(啟動速度相當的情況下,誰快誰慢運氣成分)

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

# 也可以通過 retrying模塊裝飾實現
# 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服務的固定寫法,可當作模板套
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')
    # 這里使用絕對路徑, 否則數據卷映射失敗
    # 映射部分在上面 docker-compose.yaml 的 volumes部分
    with open('/root/mycode/test.html', 'w') as f:    
        f.write(driver.page_source)
        print('寫入成功')

          
        

踩坑

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

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

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

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

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 在线观看 一区二区 麻豆 | 深夜福利免费在线观看 | 午夜在线不卡 | 久久99精品视香蕉蕉 | 四虎影院在线播放 | 不卡无毒免费毛片视频观看 | 亚洲瑟瑟网 | 日本不卡高清中文字幕免费 | 99色播| 女人十八毛片免费特黄 | 国产黄色一级大片 | 四虎永久免费网站 | 亚洲一区二区三区精品视频 | 亚洲 欧美 精品 中文第三 | 久久精品国产久金国产思思 | 一级毛片日韩a欧美 | 日本高清视频www夜色资源网 | 亚洲国产色综合有声小说 | 天天做天天爱天天一爽一毛片 | 日日碰狠狠添天天爽对白 | 中文国产成人精品久久无广告 | 国产一级在线视频 | 美女在线国产 | 高清波多野结衣一区二区三区 | 免费一级特黄欧美大片勹久久网 | 日韩一区二区三区在线视频 | 精品无人乱码一区二区三区 | 天天做天天爱天天一爽一毛片 | 天天操天天操天天干 | 野花成人 | 免费看成人毛片日本久久 | 四虎影视免费永久在线观看 | 日韩欧美视频一区二区在线观看 | 五月天婷婷久久 | 中文字幕美日韩在线高清 | 91在线 | 欧美:| 另类图片色 | 欧美jizzhd精品欧美另类 | 一级a性色生活片毛片 | 色综合视频 | 国产综合精品久久久久成人影 |