首页 > 编程语言 >Python - Playwright安装

Python - Playwright安装

时间:2024-01-18 19:11:24浏览次数:36  
标签:playwright 浏览器 Python response Playwright js 安装 page

前言:

Playwright 是专门为满足端到端测试的需要而创建的。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit(Safari 的浏览器引擎)和 Firefox。在 Windows、Linux 和 macOS 上进行本地测试或在 CI 上进行测试.

与Selenium+driver不同的是,Pw需要使用定制版的浏览器。如果本地已经安装了浏览器,那么可能会被覆盖掉,所以安装时请注意。官方会通过微软CDN自动下载,也支持配置外网代理下载,如果微软CDN在工作环境禁用,申请外网权限后,可以通过搭建一个跳板机进行代理下载。Playwright 安装的定制浏览器可以作为普通浏览器正常使用

 

一、安装:

 

安装Playwright

python3 -m pip install playwright -i https://mirrors.aliyun.com/pypi/simple/  # 安装playwright的python版本

 

安装Playwright自带的浏览器

python3 -m playwright install  # 安装playwright自带的浏览器和ffmepg

 

 

二、基本使用:

cmd输入命令

仅打开

playwright open  #打开Playwright

 

打开并开启录制

playwright codegen  #开启录制

#指定网址
playwright codegen www.baidu.com    

#输出保存的代码文件名称
playwright codegen -o test.py

#浏览器的名称,默认Google chromium浏览器
playwright codegen -b chromium

#保留经过身份验证的状态
playwright codegen --save-storage=auth.json  URL

#取的状态文件路径,文件包含cookie信息
playwright codegen --load-storage=auth.json URL

 

 

 

 

三、录制的代码:

from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.baidu.com/")
    page.locator("#kw").click()
    page.locator("#kw").fill("Playwright")
    age.wait_for_timeout(2000)   #等待
    page.locator("#kw").press("Enter")

    # ---------------------
    context.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)

 

四、相关命令:

#移动端浏览
iphone = playwright.devices["iPhone 12"]   

# 监听事件, 比如close、console、load、request、response等
page.on(event, callback)

#页面等待
page.wait_for_timeout(2000)

# 请求拦截
page.route(url, handler) # url可以是普通字符串(必须含url末位字符),也可以是正则pattern字符串,即re.compile(r'xxx')

# 设置页面大小
page.set_viewport_size({'width':1366, 'height':768})

# 执行js代码
data1 = page.evaluate('() => {return window.encrypt("xx", "yyy")}')
data2 = page.evaluate('([a, b]) => a + b', [3, 4]) # 7
data3 = page.evaluate('10+5') # 15

js_code1 = '''
var test = function(a,b){window.hello = 20;return a + b}; // 只能使用函数表达式,使用函数声明则会报错
test(30,60) // 不能使用return
'''
js_code2 = '''window.hello'''
js_code3 = '''
var a = 20;
var b = 30;
a + b
'''
print(page.evaluate(js_code1)) # 90
print(page.evaluate(js_code2)) # 20
print(page.evaluate(js_code3)) # 50

# 访问具体网站
page.goto(url)

# 等待页面加载完成
page.wait_for_load_state(state='networkidle')

# 截图
page.screenshot(type=None, path=None)

# 点击页面元素
page.click(selector)

# 获取页面源码
page.content()

# 获取单个节点
element = page.query_selector(selector)
element.get_attribute('属性名') # 获取节点属性
element.text_content() # 获取节点文本

# 获取多个节点
elements = page.query_selector_all(selector)
for ele in elements:
    ele.get_attribute('属性名') # 获取属性
    ele.text_content() # 获取文本

# 文本输入
# 方式一
page.fill(selector, value, timeout=None) # 根据选择器,输入文本内容,timeout可设置对应节点的最长等待时间
# 方式二: 可以先获取节点,然后调用节点的fill()方法

 

五、事件监听:

Page对象提供了on方法,用来监听页面中的各个事件,比如close、console、load、request、response等

from playwright.sync_api import sync_playwright


def on_response(response):
    # 直接截获ajax请求数据
    if '/api/movie' in response.url and response.status == 200:
        print(response.json())


with sync_playwright() as playwright:
    browser = playwright.chromium.launch(headless=False)
    page = browser.new_page()
    # 事件监听,例如close、console、load、request、response等
    page.on('response', on_response)
    page.goto("https://spa6.scrape.center/") # 访问网址
    page.wait_for_load_state(state='networkidle') # 等待当前页面初始化和加载完成
    browser.close()

 

标签:playwright,浏览器,Python,response,Playwright,js,安装,page
From: https://www.cnblogs.com/xiaolintongxue1/p/17972891

相关文章

  • python中的+=
    注意点:就地修改: 使用+=会就地修改可变对象,如列表或字典,而不是创建一个新的对象。这意味着原始对象会被改变。与+运算符的区别:+=与+运算符不同。对于不可变对象(如字符串、元组等),+=通常会创建一个新对象,而不是就地修改。可变对象vs不可变对象:对于可变对象(如列表、字典),+......
  • 波达方向估计(DOA)-Python代码实现MVDR
    https://mp.weixin.qq.com/s/61I1aBTwJ3ykw0uuceLKkQ模拟一个由三根全向天线组成的阵列,然后使用数组来模拟到达阵列的信号。相邻天线之间:1/2波长(也称为“半波长间隔”)。将模拟发射机的信号以一定角度theta到达该阵列。另外在这个接收到的信号中添加噪声。importnumpyasnp......
  • 波达方向估计(DOA)-Python代码实现
    https://mp.weixin.qq.com/s/fMGc8ziglySGKr1fY8Jvkw模拟一个由三根全向天线组成的阵列,然后使用数组来模拟到达阵列的信号。相邻天线之间距离为1/2波长(也称为“半波长间隔”)。将模拟发射机的信号以一定角度theta到达该阵列。另外在这个接收到的信号中添加噪声。importnumpy......
  • ubuntu安装最新版的xtrabackup
    官方文档:https://www.percona.com/doc/percona-xtrabackup/8.0/installation/apt_repo.html1,首先都在root用户下操作,不然提示权限不足wgethttps://repo.percona.com/apt/percona-release_latest.$(lsb_release-sc)_all.deb通过上面命令得到最新的安装包,会根据你的系统来,......
  • 猜字谜python文心一言
    猜字谜是一种经典的智力游戏,通过猜测谜底中的字母来逐步揭示谜底。在Python中,我们可以使用一些简单的方法来实现猜字谜游戏,并提供一些提示和反馈,使游戏更加有趣。首先,让我们来看看猜字谜游戏的基本流程。游戏开始时,我们会先设定一个谜底,这个谜底可以是任意长度的单词或短语。然后,......
  • python之数据类型
    字符串详解                                          1.centerdefcenter(self,*args,**kwargs):#realsignatureunknown"""Returnacenteredstringoflengthwi......
  • Python_python读写图片以及对应的库比较
    图片读写通过numpy来做数据计算的沟通JPEG是一种有损格式, 图像PNG,是一种无损格式cv2.imdecode()作用是将图像数据从存储格式中解析出来并转化为OpenCV中的图像格式 imdecode得到的影像波段顺序是RGBnp.fromfile将文本或二进制文件中数据构造成数组 cv2.imencod......
  • WhisperService 多GPU python
    如何实现“WhisperService多GPUPython”作为一名经验丰富的开发者,你将教会一位刚入行的小白如何实现“WhisperService多GPUPython”。下面是整个实现过程的步骤:步骤说明步骤一导入必要的库并设置GPU步骤二加载数据步骤三构建模型步骤四配置训练参数......
  • python数据结构中实现队列的几种方法
    1.list实现enqueueappend()dequeuepop(0)或enqueueinsert(0,item)dequeuepop()MAX_SIZE=100classMyQueue1(object):"""模拟队列"""def__init__(self):self.items=[]self.size=0defis_empty(s......
  • Python使用__dict__查看对象内部属性的名称和值
    1、定义一个类classMyObj:def__init__(self,name,age):self.name=nameself.age=agedefmyFunc(self):passmo=MyObj('Boby',24)print(mo)print(mo.__dict__)#结果<__main__.MyObjobjectat0x000000815C36451......