Playwright

from playwright.sync_api import sync_playwright
with sync_playwright() as self.playwright:

  1. 执行JS
# a_handle 创建一个js对象  "" 为js代码
a_handle = self.page.evaluate_handle("document")
self.page.evaluate_handle(
                "document.getElementsByClassName('index_shopName__Eocz8').click", a_handle)
  1. cook 登录
# cookie_path - cookie文件保存路径
# storage_state - 加载cookie
# accept_downloads - 允许下载
cookie_path = os.path.join("文件路径", 'cookies-state.json')
self.browser = self.playwright.chromium.launch(headless=False)
if os.path.exists(cookie_path):	# 判断是否又找到cookie,有则加载
	self.context = self.browser.new_context(storage_state=cookie_path,
                                                            accept_downloads=True,)
else:	# 无则登录
	self.context = self.browser.new_context(accept_downloads=True)
self.page = self.context.new_page()		# 创建新的page
self.page.goto(login_url)				# 进入网址
self.wait(self.page)					# 等待加载
# 登录成功后需要保存cookies
self.context.storage_state(path=cookie_path)
  1. cdp
# 先手动打开浏览器并绑定本机随意端口
command = os.getcwd() + "\\ms-playwright\chromium-907428\chrome-win\chrome.exe --remote-debugging-port=9001"
print("浏览器路径:", command)
subprocess.Popen(command)
time.sleep(5)
# playwright 连接浏览器指定端口, 就可以连接上
self.chromium = playwright.chromium.connect_over_cdp(r"http://localhost:9001")
self.context = self.chromium.new_context(accept_downloads=True)
self.page = self.context.new_page()
self.page.goto(login_url)
self.wait(self.page)
  1. 一些方法
# 双击
self.page.dblclick('button:has-text(\"提交\")')

# 获取隐藏文本
context = self.page.query_selector('#ownerAddress_mf').get_property("value").json_value()

# 是否可见
self.page.is_visible('//*[@id="dlg-dialogList"]', timeout=5000)

# 重新刷新加载页面
self.page.reload()

# 找到所有的iframe
self.page.frames

# 等待方式有几种,domcontentloaded,networkidle
self.page.wait_for_load_state('domcontentloaded')

# 选择下拉框	- 根据下拉框元素选择“是”
self.page.select_option('#sendCommTypeCode', "是")

# 加载新page,获取新page信息
self.page.frames	# 方法一
# 方法二
with self.page.expect_popup() as popup_info:
    self.page.click('text="跳转"')
new_page = popup_info.value		# 新page信息
new_page.reload()  # 重新加载
# 第三种方式获取新page信息
new_page = self.get_newPage(self.page,'text="跳转"')
# 注意事项:有时候刷新不出元素信息,先随便找个元素激活下
self.new_page.query_selector('.ui_dialog')  # 随便找个元素激活下

# 获取网页返回数据
with self.page.expect_response("请求的url") as second:
	self.page.click('span:text("搜 索")')
	time.sleep(1) # 等待一下,self.wait(self.page)
print(second.value.json())

# 上传文件
with self.page.expect_file_chooser() as fc_info:
    # 点击上传 - 必须要这个触发
    self.page.click('//*[@id="file-1241-button"]')
file_chooser = fc_info.value		# 上传事件信息
file_chooser.set_files("文件路径")	# 添加文件

# 下载文件
# 允许下载设置为True  --  accept_downloads=True
self.context = self.chromium.new_context(accept_downloads=True)
# 获取下载信息重新另存 (原本的文件名:download.suggested_filename)
with self.page.expect_download() as download_info:
	# 点击下载 - 必须要这个触发
    self.page.click('.oui-download-text-info')
download = download_info.value	# 下载事件信息
download.save_as("文件保存路径")		# 文件另存为

# 监听弹窗
	# 获取弹出框内容
	def handle_dialog(self,dialog):
	    print(dialog.message)
	    self.alert_info = dialog.message
	    dialog.accept()
	# 在需要的地方进行监听
	self.page.on("dialog", self.handle_dialog)

# 获取验证码
 self.page.eval_on_selector('#captchaImg2', 'el => el.toDataURL("image/jpeg")')  # 获取验证码图片对象base64
 self.page.locator('#captchaImg2').screenshot(path="F:yzm.png")				# 保存为图片

# 滑动验证码
 // 滑到指定空洞位置的情况
 https://blog.csdn.net/weixin_43407806/article/details/131122709
 logger.info('出现滑块验证码...')
 box = self.page.query_selector('div.geetest_slider_button').bounding_box()	# 获取划款位置
 ix = int(box['x'] + box['width'] // 2)
 iy = int(box['y'] + box['height'] // 2)
 # // 移动滑块
 self.page.mouse.move(ix, iy)
 self.page.mouse.down(button='left')
 self.move_to_gap(self.page, ix, iy, track)
 logger.info("滑动完成...")
  1. 键盘操作
# 键盘操作
self.page.keyboard.press('Control+V')				# 快捷键无需找到元素
self.page.press('#consigneeCountryName', "Enter")	# 快捷键需要找到元素
self.page.keyboard.type('文本内容')					# 按键输入文本 无需找到元素
self.page.type('文本内容')							# 按键输入文本 需要找到元素
  1. 拓展
# 复制到剪切板
import pyperclip
pyperclip.copy("文本内容")

其他方案
https://playwright.dev/docs/intro/ // 官方
https://www.yisu.com/zixun/620215.html // 博客
https://blog.51cto.com/xqtesting/2677875 // 元素定位

### Playwright 使用指南与示例代码 Playwright 是一个由微软开发的用于自动化浏览器操作的工具,支持 Chromium、Firefox 和 WebKit 等多种浏览器引擎。它提供了强大的功能来帮助开发者进行端到端测试和网页抓取。以下是 Playwright 的使用指南和一些示例代码。 #### 1. 安装 Playwright 在开始之前,需要确保已安装 Node.js 或 Python 环境。以下是安装 Playwright 的方法: 对于 **Node.js** 用户: ```bash npm install playwright ``` 对于 **Python** 用户: ```bash pip install playwright playwright install ``` #### 2. 基本概念 Playwright 的核心概念包括浏览器实例、页面对象和上下文管理器。通过这些组件,可以实现对网页的交互和测试[^1]。 #### 3. 示例代码 ##### (1) Node.js 示例代码 以下是一个简单的 Node.js 示例,演示如何启动浏览器并访问指定网站: ```javascript const { chromium } = require('playwright'); (async () => { const browser = await chromium.launch(); // 启动浏览器 const context = await browser.newContext(); // 创建新的浏览器上下文 const page = await context.newPage(); // 打开新页面 await page.goto('https://example.com'); // 访问目标网址 console.log(await page.title()); // 输出网页标题 await browser.close(); // 关闭浏览器 })(); ``` ##### (2) Python 示例代码 以下是 Python 版本的示例代码,展示如何使用 Playwright 进行基本操作: ```python from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() # 启动浏览器 page = browser.new_page() # 打开新页面 page.goto("https://example.com") # 访问目标网址 print(page.title()) # 输出网页标题 browser.close() # 关闭浏览器 ``` #### 4. 高级功能 Playwright 支持许多高级功能,例如截图、视频录制、表单填写和等待特定条件等。 - **截图**:可以轻松捕获当前页面的快照。 ```python page.screenshot(path="example.png") ``` - **表单填写**:自动填充表单字段。 ```python page.fill("input[name='username']", "testuser") page.fill("input[name='password']", "testpassword") page.click("button[type='submit']") ``` - **等待元素加载**:等待特定元素出现在页面上。 ```python page.wait_for_selector("text=Hello, World!") ``` #### 5. 测试框架集成 Playwright 可以与主流测试框架(如 Jest、Mocha、pytest)无缝集成,用于编写端到端测试用例[^2]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值