ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Playwright+Python】系列教程(二)手把手带你写一个脚本 [打印本页]

作者: 徐锦洪    时间: 2024-6-24 20:37
标题: 【Playwright+Python】系列教程(二)手把手带你写一个脚本
一、怎样使用代理方式打开网页

在 playwright.chromium.launch() 中传入 proxy 参数即可,示例代码如下:
1、同步写法:
  1. from playwright.sync_api import sync_playwright
  2. proxy = {'server': 'http:/127.0.0.1:8080'}
  3. def run():
  4.     with sync_playwright() as p:
  5.         browser = p.chromium.launch(headless=False, proxy=proxy)
  6.         page = browser.new_page()
  7.         page.goto('https://www.baidu.com')
  8.         title = page.title()
  9.         if "百度" in title:
  10.             print("打开百度成功")
  11.         else:
  12.             print("打开百度失败")
  13.         browser.close()
  14. run()
复制代码
2、异步写法:
  1. from playwright.async_api import async_playwright
  2. import asyncio
  3. proxy = {'server': 'http:/127.0.0.1:8080'}
  4. async def run():
  5.     async with async_playwright() as p:
  6.         browser = await p.chromium.launch(headless=False, proxy=proxy)
  7.         page = await browser.new_page()
  8.         await page.goto('https://www.baidu.com')
  9.         title = await page.title()
  10.         if "百度" in title:
  11.             print("打开百度成功")
  12.         else:
  13.             print("打开百度失败")
  14.         await browser.close()
  15. asyncio.get_event_loop().run_until_complete(run())
复制代码
二、同步和异步写法对比

1、同步的优点:

2、异步的优点:

3、区别

4、总结

一般来说对于现代化体系,异步编程模型将是主流趋势。但同步在某些场景也同样易用。选择时要根据具体需求来权衡。
三、写一个用例

1、示例脚本

算是个入门的例子,关于每句话的意思,看我注释即可,示例代码如下:
  1. import re
  2. from playwright.sync_api import Page, expect, sync_playwright
  3. proxy = {'server': 'http://127.0.0.1:8080'}
  4. def test_baidu():
  5.     with sync_playwright() as p:
  6.         browser = p.chromium.launch(headless=False, proxy=proxy)
  7.         page = browser.new_page()
  8.         # 跳转到baidu页面
  9.         page.goto("https://www.baidu.com/")
  10.         # 点击输入框
  11.         page.locator("#kw").click()
  12.         # 输入框输入selenium
  13.         page.locator("#kw").fill("selenium")
  14.         # 点击百度一下查询按钮
  15.         page.get_by_role("button", name="百度一下").click()
  16.         # 验证输入框是否输入selenium
  17.         expect(page.locator("#kw")).to_have_value("selenium")
  18.         # 验证页面是否包含文本“大家还在搜”
  19.         expect(page.locator("#content_left")).to_contain_text("大家还在搜")
  20.         # 退出浏览器
  21.         browser.close()
复制代码
注意:
测试类和测试方法都要用test_ 前缀命名
2、根本操纵

这是 Playwright 常用操纵列表,请注意,还有许多其他操纵,请务必检察定位器 API 部分以了解更多相关信息。
操纵描述locator.check()选中输入复选框locator.click()点击元素locator.uncheck()取消选中输入复选框locator.hover()将鼠标悬停在元素上locator.fill()填写表单字段,输入文本locator.focus()聚焦元素locator.press()按下单个键locator.set_input_files()选择要上传的文件locator.select_option()从下拉菜单中选择选项3、断言操纵

断言描述expect(locator).to_be_checked()复选框处于选中状态expect(locator).to_be_enabled()控件已启用expect(locator).to_be_visible()元素可见expect(locator).to_contain_text()元素包罗文本expect(locator).to_have_attribute()元素具有属性expect(locator).to_have_count()元素列表已给出长度expect(locator).to_have_text()元素匹配文本expect(locator).to_have_value()输入元素具有值expect(page).to_have_title()页面有标题expect(page).to_have_url()页面有 URL4、fixtures夹具的使用

示例代码:
  1. import pytest
  2. from playwright.sync_api import Page, expect, sync_playwright
  3. @pytest.fixture(scope="function", autouse=True)
  4. def before_each_after_each(page: Page):
  5.     print("before the test runs")
  6.     page.goto("https://www.baidu.com/")
  7.     yield
  8.     print("after the test runs")
  9. def test_main_navigation(page: Page):
  10.     page.locator("#kw").fill("久曲健 博客园")
  11.     page.get_by_role("button", name="百度一下").click()
  12.     expect(page.locator("#content_left")).to_contain_text("久曲健 - 博客园")
复制代码
代码解释:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4