一、前言
在日常做Selenium测试的时候,总是遇到网页需要登录的情况,上次我们在做Selenium专题的时候,有讲过一个自动刷B站的案例,里面涉及到了登录的情况,详细推文点击这里,很多同学也提出了疑问,是否可以通过执行当前我设置好并登录好的网页去进行测试?那么我们今天就一起来探讨一些,如何连接已经打开的浏览器,并进行自动化测试。
二、控制现有浏览器的步骤解析
我们这边以Chrome浏览器为例,我们这里采用的是Chrome DevTools协议,他们为客户提供了检查和调试Chrome浏览器的便利功能。
具体步骤如下:
1、在控制台内打开Chrome浏览器的文件夹
2、在命令行中输入命令:
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\temp"
对于-remote-debugging-port
参数,这里可以自由选择一个未被占用的端口号进行指定,后续在初始化Selenium连接的时候会用到该端口号。
至于--user-data-dir
标志,它用于指定创建新Chrome用户数据文件夹的路径。这样做可以确保Chrome在一个新的、独立的配置文件中启动,从而避免对您的默认配置文件造成任何干扰。
3、执行完上述命令后,会生成打开一个全新的浏览器,可以在该浏览器上面进行初始化,新的用户数据也将会存在刚刚填入--user-data-dir
参数的文件夹下面。
4、在进行好浏览器初始化后,在脚本中输入下述代码进行初始化,连接已开启的浏览器:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(chrome_options=chrome_options)
做完这一步之后,就可以直接在已打开的浏览器上执行脚本或编写脚本啦。
注意:
1、该浏览器不小心关闭后,需要再次执行第二个步骤重新打开Chrome浏览器噢。一般登录状态也会随之保留的。
2、Airtest-selenium切换新网页作用域时,使用driver.switch_to_new_tab()
会出现报错:'WebDriver' object has no attribute 'switch_to_window'
,只需要将切换新网页作用域语句改为:driver.switch_to.window(driver.window_handles[-1])
即可。
三、代码案例
通过上述所讲的接管已开启浏览器的方式,我们将之前刷B站的代码重新修改一下,去掉了登录并存储cookie的方法,直接通过连接我们已打开登录好账号的浏览器,执行一系列的刷B站操作,如搜索、点击播放、发送弹幕等。
参考代码:
# 引入selenium的webdriver模块和其他必要的库
from airtest.core.api import *
from airtest_selenium.proxy import WebChrome
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import threading
import time
import random
import json
# 设置Chrome选项,连接到已打开的Chrome浏览器
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver.implicitly_wait(20)
# 连接到已打开的Chrome浏览器
driver = webdriver.<