1. 程式人生 > 其它 >selenium 確實是好東西,使用selenium-server 加快執行速度,對速度有很大提升,同時可以拆分服務,進行叢集部署。

selenium 確實是好東西,使用selenium-server 加快執行速度,對速度有很大提升,同時可以拆分服務,進行叢集部署。

目錄

前言


本文的原文連線是:
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

博主地址是:https://blog.csdn.net/freewebsys