高效 Selenium 测试技巧:轻松控制已开启

来源:这里教程网 时间:2026-03-03 20:42:35 作者:
在日常做 Selenium 测试的时候,总是遇到网页需要登录的情况,上次我们在做 Selenium 专题的时候,有讲过一个自动刷 B 站的案例,里面涉及到了登录的情况,详细推文点击  这里  ,很多同学也提出了疑问,是否可以通过执行当前我设置好并登录好的网页去进行测试?那么我们今天就一起来探讨一些,如何连接已经打开的浏览器,并进行自动化测试。

二、控制现有浏览器的步骤解析

我们这边以 Chrome 浏览器为例,我们这里采用的是 Chrome DevTools 协议,他们为客户提供了检查和调试 Chrome 浏览器的便利功能。
具体步骤如下:
1、在控制台内打开 Chrome 浏览器的文件夹
2、在命令行中输入命令:

   
   
  
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 浏览器,执行一系列的刷 B 站操作,如搜索、点击播放、发送弹幕等。
参考代码:

   
   
  
引入selenium 模块和其他必要的库 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 输入搜索关键词并提交搜索     search_box = driver.find_element(By.CLASS_NAME, 'nav-search-input')     search_box.send_keys( 'Airtest 切换界面     sleep( 3)      # 酱”主页     driver.find_element(By.XPATH, "//*[@id=\"i_cecream\"]/div/div[2]/div[2]/div/div/div/div[2]/div/div/div/div/div/div/h2/a").click()           # 查找特定视频元素     video_ele = driver.find_element(By.XPATH, "//div[@title='14 自动化测试小白课程 ']")      # 获取所有视频列表     video_list = driver.find_elements(By.XPATH, "//ul[@class='row video-list clearfix']//a[@class='title']")      # 切换到新打开的视频页面     driver.switch_to.window(driver.window_handles[ - 1])      # 随机播放一个视频     driver.switch_to.window(driver.window_handles[ - 1])   # 暂停播放 def  video_pause_and_play(check_btn= False):           try:          # 暂停按钮         paus_btn = driver.find_elements(By.XPATH,              "//*[@id=\"bilibili-player\"]//div[@class='bpx-player-ctrl-btn bpx-player-ctrl-play']")          if paus_btn[ 0]:              # 时间戳检测是否在播放             detection_time2 = driver.find_elements(By.XPATH,                  '//*[@class="bpx-player-control-bottom-left"]//div[@class="bpx-player-ctrl-time-label"]')             end_time = detection_time2[ 0].text                           # True 暂停按钮              if start_time == end_time  or check_btn:                  print( " 暂停 )<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 按钮 ")                 paus_btn[ 0].click()      except Exception  as e:          print( f " 暂停 )<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 出错 {e} ") #<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">发送弹幕 def  video_sms(sms_body= "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 不错 "):      try:          # 输入弹幕内容并发送         sms_input_edit.send_keys(sms_body)         sms_input_edit.send_keys(Keys.ENTER)      except Exception  as e:          print( f "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 发弹幕出错 {e} ")      print( f "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 发送弹幕: {sms_body} ") # <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">点赞视频 def  video_love():           print( "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 点赞 ")      try:          # <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">查找点赞按钮         sms_input_edit = driver.find_elements(By.XPATH,              "//div[@class='toolbar-left-item-wrap']//div[@class='video-like video-toolbar-left-item']")          if  not sms_input_edit:              print( "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 已经点赞 ")              return          # <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">点击点赞按钮         sms_input_edit[ 0].click()      except Exception  as e:          print( f "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 点赞出错 {e} ") # <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">收藏视频 def  video_collect():      print( "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 收藏 ")      try:          # <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">查找收藏按钮         colle_btn = driver.find_elements(By.XPATH,              "//div[@class='toolbar-left-item-wrap']//div[@class='video-fav video-toolbar-left-item']")          if  not colle_btn:              print( "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 已经收藏 ")              return          # 获取收藏夹列表         list_coll = driver.find_elements(By.XPATH, "//div[@class='group-list']//ul/li/label")          # 滚动到选中的收藏夹元素位置         random_element = random.choice(list_coll)   # 滚动到指定元素处         driver.execute_script( "arguments[0].scrollIntoView(true);", random_element)         sleep( 2)         random_element.click()   # 点击确认收藏按钮         driver.find_element(By.XPATH, "//div/button[@class='btn submit-move']").click()               except Exception  as e:          print( f "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 收藏出错 {e} ") def  wait_for_element(driver, selector, timeout= 60 *  5):      try:          # 等待元素出现         element = WebDriverWait(driver, timeout).until(             EC.presence_of_element_located((By.XPATH, selector))         )      except Exception:          print( "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 元素未出现 ")          return  None # 启动浏览器并打开视频     start_selenium()      # <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">等待元素出现     element = wait_for_element(driver, selem)      if element:          print( "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 检测到已经登录 ")          # 刷新页面         driver.refresh()          # <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">发送多条随机弹幕         sms_list = [ "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 感觉不错,收藏了 " "666,<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 这么强 " "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 自动化还得看 airtest" "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 干货呀 " "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 麦克阿瑟直呼内行 "]          for item  in sms_list:             wait_time = random.randint( 5 10)   #             time.sleep(wait_time)             video_sms(item)   # 点赞和收藏视频          for action  in [video_love, video_collect]:             action()             sleep( 3)      else:          print( "<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";"> 登录超时 ")

相关推荐