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道题,不仅能轻松搞定面试࿰…...
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++刷题笔记)
递归,回溯,分治(C刷题笔记) 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这篇文章,https://mirrors.tuna.tsinghua.edu.cn/help/centos/是清华大学官网教程。 /etc/yum.repos.d/CentOS-Base.repo文件如下: #…...
三、进度管理
3、 [单选] 一个项目实施团队需要满足一份非常严格的进度计划。相对于已完成的事项,这样会导致正在进行的工作超过负荷。为了解决这个问题,项目经理需要获得额外的资源。项目经理应该向发起人提供什么理由来支持追加资源的请求? A project im…...
基于LEACH和HEED的WSN路由协议研究与改进(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 无线传感器网络是不断发展的传感技术之一,也用于执行不同的任务。这些类型的网络在许多领域都是有益的,…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
