天天看點

Docker selenium自動化 - 執行程式沒反應、不執行原因,強制處理之前失敗的程序,“... requests waiting for a slot to be free“問題解決

docker 運作 selenium 自動化發現根本不向下走了。

通路 Grid 控制台發現提示

3 requests waiting for a slot to be free.

原因是之前執行失敗的程序沒有正常釋放才會出現阻塞的問題。
Docker selenium自動化 - 執行程式沒反應、不執行原因,強制處理之前失敗的程式,“... requests waiting for a slot to be free“問題解決
檢視詳細資訊可以看到逾時時間為 1800 秒,即問題程序卡 30 分鐘才會自動釋放掉。
Docker selenium自動化 - 執行程式沒反應、不執行原因,強制處理之前失敗的程式,“... requests waiting for a slot to be free“問題解決
通過 cocker restart + 執行個體名 來強制釋放失敗的程序。
Docker selenium自動化 - 執行程式沒反應、不執行原因,強制處理之前失敗的程式,“... requests waiting for a slot to be free“問題解決

腳本改進方案:

通過

try [關鍵代碼] finally [程序釋放]

的方式可以避免調試過程中的程序不釋放問題。

執行個體如下:

# -*- coding: UTF8 -*-
# 2021.11.16
# 小藍棗
# docker selenium 自動化

from selenium import webdriver
from time import sleep

driver = webdriver.Remote(
    command_executor='http://127.0.0.1:55006/wd/hub',
    desired_capabilities={'browserName': 'chrome'}
)

try:
    # 登入中國氣象網檢視北京天氣
    driver.get('http://www.weather.com.cn/weather1d/101010100.shtml')
    sleep(3)
    # 讀取天氣資訊
    bj_temperature = driver.find_element_by_xpath('//*[@class="sk mySkyNull"]//*[@class="tem"]/*').text
    bj_wind_direction = driver.find_element_by_xpath('//*[@class="sk mySkyNull"]//*[@class="zs w"]/span').text
    bj_wind_class = driver.find_element_by_xpath('//*[@class="sk mySkyNull"]//*[@class="zs w"]/em').text
    bj_air_quality = driver.find_element_by_xpath('//*[@class="sk mySkyNull"]//*[@class="zs pol"]//a').text

    bj_weather = '''
    城市:北京
    目前溫度:%s
    風向:%s
    風力:%s
    空氣品質:%s
    '''%(bj_temperature,bj_wind_direction,bj_wind_class,bj_air_quality)

    # 列印抓取的天氣資訊
    print(bj_weather)
    
    # 儲存截圖
    driver.get_screenshot_as_file("docker_selenium_run_001.png")
    
# 保證出錯後程序正常釋放
finally:
    driver.quit()      

喜歡的點個贊❤吧!