selenium.WebDriver 复用浏览器

本文介绍了如何在命令提示符下启动谷歌浏览器,并配置远程调试端口,以便在不关闭浏览器的情况下执行测试用例,从而跳过扫码登录步骤。文章提供了详细的步骤,包括检查浏览器环境变量设置,以及针对Windows和Mac的启动命令。同时,提醒读者注意端口占用问题和错误排查方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、通过命令提示符打开浏览器

1)确保关闭所有浏览器页面

2)确保谷歌浏览器,已配置path环境变量(关于如何配置自行百度一下)
在这里插入图片描述
3)cmd输入以下命令,启动浏览器
windows启动命令:chrome --remote-debugging-port=9222
mac启动命令:Google\ Chrome --remote-debugging-port=9222

4)打开浏览器,进行后续操作,比如:扫码登录
扫码登录成功后,进入首页,不关闭当前浏览器的前提下,执行测试用例,就可以跳过扫码登录操作了。

2、前置条件添加以下几行__代码__

主要是框选部分,总共三行,代码位置按实际情况调整
通过备注可以更好去理解这几行代码
在这里插入图片描述
注:
1)上面款选的三行代码,可以直接复制黏贴,无需更改
2)遇到端口被占用,可以修改端口号,也就是9222
3)遇到其他报错,根据报错信息自行百度即可

from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.webdriver import WebDriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options from selenium.common.exceptions import TimeoutException, WebDriverException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def init_driver(): chrome_options = Options() # 基础配置 chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--headless=new") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--single-process") # 强化反检测配置 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # 初始化Driver(确保路径正确) service = Service(executable_path="/usr/bin/sensible-browser") driver: WebDriver = webdriver.Chrome(service=service) # 覆盖WebDriver属性 driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': ''' Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); ''' }) return driver # 安全初始化Driver变量 driver = None try: driver = init_driver() driver.get('http://portal.sx.cmcc/home') # 显式等待元素可见(非仅存在) wait = WebDriverWait(driver, 15) main_content = wait.until( EC.visibility_of_element_located((By.ID, "main-content")) ) print("成功加载目标元素!") except TimeoutException as e: print(f"页面元素加载超时: {str(e)}") except WebDriverException as e: print(f"浏览器驱动异常: {str(e)}") if "net::ERR_NAME_NOT_RESOLVED" in str(e): print("提示:请检查网址是否正确或网络连接是否正常") except Exception as e: print(f"未知错误: {str(e)}") finally: if driver: driver.quit() else: print("警告:Driver未成功初始化,无需退出")
03-13
from selenium import webdriver from selenium.webdriver.chrome.options import Options import time from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def init_driver(reuse_session=True): if reuse_session: # 连接已存在的调试会话 chrome_options.debugger_address = "127.0.0.1:9222" else: # 创建新会话时配置调试参数 chrome_options.add_argument("--remote-debugging-port=9222") chrome_options.add_argument("--user-data-dir=C:/Users/fzh13/Desktop/selenium/cookie") chrome_options.add_argument("--no-sandbox") return if __name__ == "__main__": # 第一次启动(创建新会话) chrome_options = Options() service = webdriver.ChromeService(executable_path='chromedriver.exe')#设置驱动 chrome_options.add_experimental_option("detach", True) # 防止自动关闭 chrome_options.add_argument('--start-maximized')# 最大化 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])#不显示被控制 chrome_options.add_experimental_option("useAutomationExtension", False)#不显示被控制 driver1 = init_driver(reuse_session=False) driver = webdriver.Chrome(options=chrome_options, service=service) driver1.get("https://www.baidu.com") print("首次会话标题:", driver1.title) time.sleep(2) driver1.quit() # 注意这里会关闭浏览器进程 # 第二次启动(必须手动启动浏览器后连接) # 需先执行命令: chrome --remote-debugging-port=9222 --user-data-dir=./chrome_profile driver2 = init_driver() print("复用会话标题:", driver2.title) driver2.quit() Traceback (most recent call last): File "C:\Users\fzh13\Desktop\selenium\1.py", line 31, in <module> driver1.get("https://www.baidu.com") AttributeError: 'NoneType' object has no attribute 'get'
03-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大城市的小人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值