selenium 確實是好東西,使用selenium-server 加快執行速度,對速度有很大提升,同時可以拆分服務,進行叢集部署。
阿新 • • 發佈:2021-05-20
目錄
前言
本文的原文連線是:
https://blog.csdn.net/freewebsys/article/details/116972995
未經博主允許不得轉載。
博主地址是:http://blog.csdn.net/freewebsys
1,關於selenium-server
本來本地執行selenium 也可以,但是使用 selenium-server 會更快速,同時也更穩定。
https://www.selenium.dev/selenium/docs/api/py/index.html
2,本地模式
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
options = webdriver.ChromeOptions()
desired_capabilities = options.to_capabilities() # 將功能新增到options中
desired_capabilities['loggingPrefs'] = {
"performance": "ALL" # 新增日誌
}
# 手機模式
mobile_emulation = {"deviceName": "iPhone 6"}
options.add_experimental_option("mobileEmulation", mobile_emulation)
# 開發者模式
options.add_argument("--auto-open-devtools-for-tabs")
options.add_argument('--no-sandbox')
# 無頭模式,不開啟瀏覽器
options.add_argument('headless')
with webdriver. Chrome(chrome_options=options,desired_capabilities=desired_capabilities) as driver:
driver.get("https://m.bilibili.com/channel/223")
print(driver.title)
elem = driver.find_element_by_class_name("search")
print(elem)
source = driver.page_source
# print(source)
print(driver.get_log('browser'))
print(driver.get_log('driver'))
#print(driver.get_log('client'))
#print(driver.get_log('server'))
for entry in driver.get_log('browser'):
params = json.loads(entry.get('message')).get('message')
print(params.get('request')) # 請求連線 包含錯誤連線
print(params.get('response')) # 響應連線 正確有返回值得連線
3,使用文件selenium-server
下載 jar:
http://selenium-release.storage.googleapis.com/4.0/selenium-server-standalone-4.0.0.jar
https://www.selenium.dev/selenium/docs/api/py/index.html
然後執行:
java -jar selenium-server-standalone-4.0.0.jar
再使用 remote 的api 即可:
#from selenium import webdriver
import selenium.webdriver.remote.webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
options = selenium.webdriver.ChromeOptions()
desired_capabilities = options.to_capabilities() # 將功能新增到options中
desired_capabilities['loggingPrefs'] = {
"performance": "ALL" # 新增日誌
}
# 手機模式
mobile_emulation = {"deviceName": "iPhone 6"}
options.add_experimental_option("mobileEmulation", mobile_emulation)
# 開發者模式
options.add_argument("--auto-open-devtools-for-tabs")
options.add_argument('--no-sandbox')
# 無頭模式,不開啟瀏覽器
options.add_argument('headless')
with selenium.webdriver.remote.webdriver.WebDriver(options=options,
command_executor="http://127.0.0.1:4444/wd/hub",desired_capabilities=DesiredCapabilities.CHROME) as driver:
#with webdriver.Chrome(chrome_options=options,desired_capabilities=desired_capabilities) as driver:
# https://www.selenium.dev/selenium/docs/api/py/webdriver_remote/selenium.webdriver.remote.webdriver.html
#
driver.get("https://m.bilibili.com/channel/223")
print(driver.title)
elem = driver.find_element_by_class_name("search")
print(elem)
source = driver.page_source
# print(source)
print(driver.get_log('browser'))
print(driver.get_log('driver'))
print(driver.get_log('server'))
都是訪問同一個網站:
使用 time 命令對比下:
本地模式:
real 0m2.505s
user 0m0.575s
sys 0m0.124s
遠端模式:
real 0m1.551s
user 0m0.126s
sys 0m0.026s
可以看出來,1.5 s 對比 2.5s 還是快了不少呢,要是並行執行,頻繁的建立 chrome 服務,消耗還是挺大的。
4,總結
selenium server 非常方便,可以直接遠端訪問,方便進行服務拆分,微服務化。
本文的原文連線是:
https://blog.csdn.net/freewebsys/article/details/116972995