0
点赞
收藏
分享

微信扫一扫

Selenium重复使用远程打开的Remote Chrome浏览器

杰克逊爱学习 2022-07-12 阅读 78


为了重复使用一个已经打开的浏览器,可以根据​​executor_url​​​和​​session_id​​来重新获取浏览器的控制权。

开启远程Hub服务

下载jar包:​​https://www.seleniumhq.org/download/​​

运行:

java -jar selenium-server-standalone-3.141.59.jar

运行测试脚本:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
driver.get("http://www.baidu.com")
executor_url = driver.command_executor._url
session_id = driver.session_id
print(executor_url)
print(session_id)

结果:

http://127.0.0.1:4444/wd/hub
52bac4f63e2794e5e68481b6e0ce7a8c

现在就可以打开:​​http://127.0.0.1:4444/wd/hub/​​ 查看所有已经打开的session。

Selenium重复使用远程打开的Remote Chrome浏览器_5e

重写Remote

selenium的Remote每次都要新建一个session,这样就无法使用已经打开的session_id,所以我们要重写Remote。

Selenium重复使用远程打开的Remote Chrome浏览器_firefox_02

from selenium.webdriver import Remote
from selenium.webdriver.chrome import options
from selenium.common.exceptions import InvalidArgumentException


class ReuseChrome(Remote):
def __init__(self, command_executor, session_id):
self.r_session_id = session_id
Remote.__init__(self, command_executor=command_executor, desired_capabilities={})

def start_session(self, capabilities, browser_profile=None):
"""
重写start_session方法
"""
if not isinstance(capabilities, dict):
raise InvalidArgumentException("Capabilities must be a dictionary")
if browser_profile:
if "moz:firefoxOptions" in capabilities:
capabilities["moz:firefoxOptions"]["profile"] = browser_profile.encoded
else:
capabilities.update({'firefox_profile': browser_profile.encoded})

self.capabilities = options.Options().to_capabilities()
self.session_id = self.r_session_id
self.w3c = False

测试

driver2 = ReuseChrome(command_executor="http://127.0.0.1:4444/wd/hub",
session_id="52bac4f63e2794e5e68481b6e0ce7a8c")

# 打印current_url为百度的地址,说明复用成功
print(driver2.current_url)
driver2.get("http://www.sina.com")

参考

​​http://www.spiderpy.cn/blog/detail/36​​

​​​https://github.com/SeleniumHQ/selenium/wiki/RemoteWebDriver​​​​h​​

​​ttps://github.com/SeleniumHQ/selenium/wiki/Grid2​​


举报

相关推荐

0 条评论