当前位置: 首页 > news >正文

playwright连接已有浏览器操作

文章目录

  • playwright连接已有浏览器操作
    • 前置准备
    • 打开本地已有缓存的Chrome(理解)
    • 指定端口打开浏览器
    • 连接指定端口已启动浏览器(推荐)

playwright连接已有浏览器操作

前置准备

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

打开本地已有缓存的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处可以填的参数介绍如下

List of Chromium Command Line Switches « Peter Beverloo

中文版:Chrome浏览器启动参数大全(命令行参数) - 故人与猫 - 博客园 (cnblogs.com)

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

序号参数说明
1–allow-outdated-plugins不停用过期的插件。
2–allow-running-insecure-content默认情况下,https 页面不允许从 http 链接引用 javascript/css/plug-ins。添加这一参数会放行这些内容。
3–allow-scripting-gallery允许拓展脚本在官方应用中心生效。默认情况下,出于安全因素考虑这些脚本都会被阻止。
4–disable-desktop-notifications禁用桌面通知,在 Windows 中桌面通知默认是启用的。
5–disable-file-system停用 FileSystem API。
6–disable-preconnect停用 TCP/IP 预连接。
7–disable-remote-fonts关闭远程字体支持。SVG 中字体不受此参数影响。
8–disable-web-security不遵守同源策略。
9–disk-cache-dir将缓存设置在给定的路径。
10–disk-cache-size设置缓存大小上限,以字节为单位。
11–dns-prefetch-disable停用DNS预读。
12–enable-print-preview启用打印预览。
13–extensions-update-frequency设定拓展自动更新频率,以秒为单位。
14–incognito让浏览器直接以隐身模式启动。
15–keep-alive-for-test最后一个标签关闭后仍保持浏览器进程。(某种意义上可以提高热启动速度,不过你最好得有充足的内存)
16–kiosk启用kiosk模式。(一种类似于全屏的浏览模式)
17–lang使用指定的语言。
18–no-displaying-insecure-content默认情况下,https 页面允许从 http 链接引用图片/字体/框架。添加这一参数会阻止这些内容。
19–no-referrers不发送 Http-Referer 头。
20–no-startup-window启动时不建立窗口。
21–proxy-server使用给定的代理服务器,这个参数只对 http 和 https 有效。
22–start-maximized启动时最大化。
23–single-process以单进程模式运行 Chromium。(启动时浏览器会给出不安全警告)。
24–user-agent使用给定的 User-Agent 字符串。
25–process-per-tab每个分页使用单独进程。
26–process-per-site每个站点使用单独进程。
27–in-process-plugins插件不启用单独进程。
28–disable-popup-blocking禁用弹出拦截。
29–disable-javascript禁用JavaScript。
30–disable-java禁用Java。
31–disable-plugins禁用插件。
32–disable-images禁用图像。
33–remote-debugging-port在指定端口上启用HTTP远程调试

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文件,详细方法参考之前的文章:

CSDN:https://blog.csdn.net/qq_46158060/article/details/122211988

公众号:Python+selenium定位已打开的谷歌浏览器 (qq.com)

@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这里为什么是这样写呢?我抄的源码示列的,诶嘿嘿

关键字:浏览器上下文

请添加图片描述

相关文章:

playwright连接已有浏览器操作

文章目录 playwright连接已有浏览器操作前置准备打开本地已有缓存的Chrome(理解)指定端口打开浏览器连接指定端口已启动浏览器(推荐) playwright连接已有浏览器操作 前置准备 pip install playwright # 安装playwright的python…...

深度学习模型评估简单介绍

文章目录 深度学习模型评估介绍训练集、验证集和测试集应用场景准确率和误差率精确率和召回率F1 分数ROC 曲线和 AUC总结 深度学习模型评估介绍 本教程将介绍深度学习模型的基本评估方法及它们的应用场景。我们主要关注监督学习模型。 训练集、验证集和测试集 在深度学习中&…...

PyTorch——利用Accelerate轻松控制多个CPU/GPU/TPU加速计算

PyTorch——利用Accelerate轻松控制多个CPU/GPU/TPU加速计算 前言官方示例单个程序内控制多个CPU/GPU/TPU简单说一下设备环境导包加载数据 FashionMNIST创建一个简单的CNN模型训练函数-只包含训练训练函数-包含训练和验证训练 多个服务器、多个程序间控制多个CPU/GPU/TPU参考链…...

4个很多人都不知道的现代JavaScript技巧

JavaScript在不断的进化和升级,越来越多的新特性让我们的代码变得更加简洁。因此,今天这篇文章,我将跟大家分享 4 个不常用的 JavaScript 运算符。让我们一起研究它们。 1.可选的链接运算符 这个功能非常好用,它可以防止我的代码…...

【Java笔试强训 19】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥汽水瓶 …...

JPA整合达梦数据库

陈老老老板🦸 👨‍💻本文专栏:国产数据库-达梦数据库(主要讲一些达梦数据库相关的内容) 👨‍💻本文简述:本文讲一下SpringBoot整合JPA与达梦数据库,就是简单&…...

制药专业转行软件测试,带我的师傅在这干了两年半,最终还是跑路了......

故事的开始 最近这几天有点忧伤,因为带我的师傅要跑路了,嗯,应该说已经跑路了,他是制药专业的,已经在这个公司干了两年半了。其实今年3月份的时候他就跟我说他要跑路了,然后我说,要不你先把五一…...

「SQL面试题库」 No_53 项目员工II

🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试&#xff0…...

Ruby适用于什么类型的开发

Ruby是一种开源的、解释型的、面向对象的编程语言,由松本行弘(Yukihiro Matsumoto)于1993年首次发布。Ruby语言的设计理念是追求简洁优美,使编程更加人性化,其语法简单、易读、易写,被誉为“程序员的最佳朋…...

Mysql数据库的备份恢复

最近正在做一个异地数据的定期同步汇总工作,涉及到的数据库主要是Mysql数据库,用于存储现场的一些IOT采集的实时数据,所以做了以下备份恢复测试,现场和总部网络可定期联通,但速度有限,因此计划采用备份恢复…...

C++ 使用动态内存创建一个类

使用动态内存的一个常见原因是允许多个对象共享相同的状态。 例如,假定我们希望定义一个名为Blob 的类,保存一组元素。与容器不同,我们希望Blob对象的不同拷贝之间共享相同的元素。即,当我们拷贝一个Blob时,原Blob对象…...

2023年华中杯选题人数公布

2023年华中杯选题人数公布 经过一晚上代码的编写,论文的写作,C题完整版论文已经发布, 注:蓝色字体为说明备注解释字体,不能出现在大家的论文里。黑色字体为论文部分,大家可以根据红色字体的注记进行摘抄。…...

【黑马旅游案例记录(结合ES)】

黑马旅游案例记录 11.9.黑马旅游案例11.9.1.酒店搜索和分页11.9.1.1.需求分析11.9.1.2.定义实体类11.9.1.3.定义controller11.9.1.4.实现搜索业务 11.9.2.酒店结果过滤11.9.2.1.需求分析11.9.2.2.修改实体类11.9.2.3.修改搜索业务 11.9.3.我周边的酒店11.9.3.1.需求分析11.9.3.…...

基于 A* 搜索算法来优化无线传感器节点网络的平均电池寿命(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 A*(念做:A Star)算法是一种很常用的路径查找和图形遍历算法。它有较好的性能和准确度。本文…...

三款自研AI应用引领未来,重塑行业新风尚

在这个科技日新月异的时代,AI技术已经渗透到我们生活的方方面面。今天,我们将向您推荐三款领域独具特色的AI应用,它们分别是AI律师、AI小红书文案提示词、以及AI Midjourney提示词。这些应用都具有独特的内涵,让我们一起走进这些智…...

Kafka的命令行操作

一、topic命令 下面Windows命令需要把cmd路径切换到bin/windows下。 而Linux命令只需要在控制台切换到bin目录下即可。 下面都以Windows下的操作为例,在Linux下也是一样的。 1.1 查看主题命令的参数 kafka-topics.bat # Windows kafka-topics.sh # Linux输…...

递归,回溯,分治(C++刷题笔记)

递归&#xff0c;回溯&#xff0c;分治&#xff08;C刷题笔记&#xff09; 78. 子集 力扣 预备知识 nums[][1,2,3],先将子集[1],[1,2],[1,2,3]打印 #include <bits/stdc.h>using namespace std;int main() {vector<int>nums;for (int i1;i<3;i){nums.push_…...

CentOS 7.6更改yum源

使用字符串替换 我这里的操作参考了https://baijiahao.baidu.com/s?id1708418392526536542&wfrspider&forpc这篇文章&#xff0c;https://mirrors.tuna.tsinghua.edu.cn/help/centos/是清华大学官网教程。 /etc/yum.repos.d/CentOS-Base.repo文件如下&#xff1a; #…...

三、进度管理

3、 [单选] 一个项目实施团队需要满足一份非常严格的进度计划。相对于已完成的事项&#xff0c;这样会导致正在进行的工作超过负荷。为了解决这个问题&#xff0c;项目经理需要获得额外的资源。项目经理应该向发起人提供什么理由来支持追加资源的请求&#xff1f; A project im…...

基于LEACH和HEED的WSN路由协议研究与改进(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 无线传感器网络是不断发展的传感技术之一&#xff0c;也用于执行不同的任务。这些类型的网络在许多领域都是有益的&#xff0c…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...