selenium 确实是好东西,使用selenium-server 加快执行速度,对速度有很大提升,同时可以拆分服务,进行集群部署。
Posted freewebsys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于selenium 确实是好东西,使用selenium-server 加快执行速度,对速度有很大提升,同时可以拆分服务,进行集群部署。的主要内容,如果未能解决你的问题,请参考以下文章