docker 運作 selenium 自動化發現根本不向下走了。
通路 Grid 控制台發現提示
3 requests waiting for a slot to be free.
原因是之前執行失敗的程序沒有正常釋放才會出現阻塞的問題。 檢視詳細資訊可以看到逾時時間為 1800 秒,即問題程序卡 30 分鐘才會自動釋放掉。 通過 cocker restart + 執行個體名 來強制釋放失敗的程序。 腳本改進方案:
通過
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()
喜歡的點個贊❤吧!