playwright连接已有浏览器操作

news/2025/2/19 8:14:46/

  •  📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢交流讨论:欢迎加入我们一起学习!
  • 📢资源分享:耗时200+小时精选的「软件测试」资料包
  • 📢 软件测试学习教程推荐:火遍全网的《软件测试》教程


前置准备

# 安装playwright的python版本
pip install playwright  
# 安装playwright自带的浏览器和ffmepg,此步骤耗时较长
playwright install  

打开本地已有缓存的Chrome(理解)

之前有写过一篇selenium打开指定浏览器进行自动化操作的文章(链接见后文),但那篇需要自己通过bat文件去启动浏览器。而且还要下载对应的驱动。

playwright就不需要下载驱动,它自己有,你浏览器版本可以不用管了,而且这个时候,你可以通过launch_persistent_context方法直接在代码中添加已有缓存的谷歌浏览器,并且指定端口打开,你以后全部由代码来跑就可以了。
 

# -*- coding: utf-8 -*-
'''
@Time : 2023/4/28 12:29
@Author : Vincent.xiaozai
@Email : Lvan826199@163.com
@File : playwright_demo1.py
'''
__author__ = "梦无矶小仔"import timefrom playwright.sync_api import Playwright,sync_playwright
# C:\Users\xiaozai\AppData\Local\ms-playwright
with sync_playwright() as playwright:browser = playwright.chromium.launch_persistent_context(# 指定本机用户缓存地址user_data_dir=r"C:\Users\xiaozai\AppData\Local\Google\Chrome\User Data",# 指定本机google客户端exe的路径executable_path=r"C:\Users\xiaozai\AppData\Local\Google\Chrome\Application\chrome.exe",# 要想通过这个下载文件这个必然要开  默认是Falseaccept_downloads=True,# 设置不是无头模式headless=False,bypass_csp=True,slow_mo=10,# 跳过检测args = ['--disable-blink-features=AutomationControlled','--remote-debugging-port=9222'])page = browser.new_page()page.goto("https://www.baidu.com/")print(page.title())time.sleep(200)browser.close()

user_data_dir:此文件夹就是你电脑本地所在的缓存文件夹,可以是系统默认的,也可以是你自己新建的

args处常用参数请参考下表。

launch_persistent_context可填参数可以查看源码,playwright -> sync_api -> _generated.py

运行效果展示:

看到右上角了吗?是登陆状态的,说明加载了我的用户信息,你可以打开一个新的标签页,你还会发现里面有你的标签。

指定端口打开浏览器
就字面意思,emmmm,貌似目前我还没有遇到需要用这个的场景。还是用前面那个方法结合着用好

from playwright.sync_api import sync_playwright
playwright = sync_playwright().start()
# 指定端口打开浏览器
browser = playwright.chromium.launch(headless=False, args=['--remote-debugging-port=9001'])
time.sleep(10)
page = browser.new_page()
page.goto("https://www.baidu.com/")
print(page.title())
time.sleep(10)
browser.close()

连接指定端口已启动浏览器(推荐)
这个方案就是不使用launch_persistent_context方法,需要自己手动启动一个浏览器(或者使用命令),之后让playwright连接上这个浏览器进行自动化操作。

「前置操作」

需要通过命令启动一个特定的浏览器,这里我做了一个bat文件,详细方法参考之前的文章:
 

@echo off
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenium\AutomationProfile"

 我们先通过该命令快捷启动浏览器,之后就可以通过代码连接上该浏览器了。

# 可以使用bat手动打开该浏览器,也可以通过如下命令打开
command = r"C:\Users\xiaozai\AppData\Local\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir=C:\selenium\AutomationProfile"
subprocess.Popen(command)
time.sleep(5)playwright = sync_playwright().start()
# 连接已打开浏览器,找好端口
browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:9222")
default_context = browser.contexts[0] # 注意这里不是browser.new_page()了
page = default_context.pages[0]
page.goto("https://www.baidu.com/")
print(page.title()) #百度一下,你就知道

后面打开page这里为什么是这样写呢?我抄的源码示列的,诶嘿嘿

关键字:浏览器上下文

 最后启动的浏览器效果和前面的展示效果都是一样的 


最后我邀请你进入我们的软件测试学习交流群, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!


http://www.ppmy.cn/news/1281024.html

相关文章

Java深浅拷贝

文章目录 目录 文章目录 前言 1) 引用拷贝 2) 对象拷贝 二 . 浅拷贝 1) 拷贝构造方法实现浅拷贝 2) 工厂方法实现浅拷贝 3) clone方法实现浅拷贝 三 . 深拷贝 1) 通过重写clone方法来实现深拷贝 2) 通过对象序列化实现深拷贝 前言 大家好,今天给大家带来的是java中的…

python 用hyperlpr3 进行车牌识别

开源项目 https://github.com/zeusees/HyperLPR 下面按装相关的模块 pip install opencv-python pip install hyperlpr3 pip install cvlib代码 download_image_from_url 将网上图片存本地。 import urllib.request import cv2 import hyperlpr3 as lpr3 import matplotlib.…

微信小程序-textarea组件字数实时更新

一、前言 本文实现的是在小程序中&#xff0c;textarea文本框输入文字后&#xff0c;实时显示文字的字数&#xff0c;获取更好的用户输入体验以及提示。 下图是实现的效果 二、代码实现 2-1、wxml代码 <view style"padding: 30rpx;"><view style"…

本地使用 docker 运行OpenSearch + Dashboard + IK 分词插件

准备基础镜像 注意一定要拉取和当前 IK 分词插件版本一致的 OpenSearch 镜像: https://github.com/aparo/opensearch-analysis-ik/releases 写这篇文章的时候 IK 最新版本 2.11.0, 而 dockerhub 上 OpenSearch 最新版是 2.11.1 如果版本不匹配的话是不能用的, 小版本号对不上…

Excel 获取当前行的行数

ROW() 获取当前行 ROW()1 获取当前行然后支持二次开发

Object.assign({}, obj, obj2) 这算是深拷贝吗

Object.assign({}, obj, obj2) 是使用 Object.assign() 方法来合并对象的一种常见方式&#xff0c;但它并不属于深拷贝。 Object.assign() 方法用于将一个或多个源对象的属性复制到目标对象&#xff0c;并返回目标对象。当目标对象和源对象具有相同的属性时&#xff0c;后面的…

一起玩儿物联网人工智能小车(ESP32)——14. 用ESP32的GPIO控制智能小车运动起来(二)

摘要&#xff1a;本文主要讲解如何使用Mixly实现对单一车轮的运动控制。 下面就该用程序控制我们的小车轮子转起来了。打开Mixly软件&#xff0c;然后单击顶部“文件”菜单中的“新建”功能&#xff0c;我们来开启一个新程序的开发工作。 我们的工作同样是先从最简单的开始&am…

Linux Shell 005-条件判断

Linux Shell 005-条件判断 本节关键字&#xff1a;Linux、Bash Shell、条件判断 相关指令&#xff1a;test、echo、[ ]、[[ ]] 条件判断语法结构 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] 格式3&#xff1a;[[ 条件表达式 ]] 说明&#xff1a; 格…