首页 > 编程语言 >Python Playwright学习笔记(二)

Python Playwright学习笔记(二)

时间:2025-01-20 14:34:34浏览次数:1  
标签:playwright Python await 笔记 Playwright import async page browser

一、模拟手机
playwright.devices可以配置模拟器。

import asyncio
from playwright.async_api import async_playwright

async def run(playwright):
    iphone_12 = playwright.devices['iPhone 12']
    browser = await playwright.webkit.launch(headless=False)
    context = await browser.new_context(
        **iphone_12,
    )

async def main():
    async with async_playwright() as playwright:
        await run(playwright)
asyncio.run(main())

二、监听响应

page.on可以监听事件,包含浏览器关闭、请求、响应等。

from playwright.sync_api import sync_playwright
 
def on_response(response):
    if '/api/xx/' in response.url and response.status == 200:
        print(response.json())
 
with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.on('response', on_response)
    page.goto('https://xx.com/')
    page.wait_for_load_state('networkidle')
    browser.close()

三、读写Cookies

from playwright.sync_api import Playwright, sync_playwright
import json
 
 
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)

# 加载cookie
with open("cookie.json") as f:
    storage_state = json.loads(f.read())
context = browser.new_context(storage_state=storage_state)

# Open new page
page = context.new_page()

# Go to http://www.glidedsky.com/login
page.goto("http://www.xx.com/login")

# Click input[name="email"]
page.click("input[name=\"email\"]")

# Fill input[name="email"]
page.fill("input[name=\"email\"]", "账号")

# Click input[name="password"]
page.click("input[name=\"password\"]")

# Fill input[name="password"]
page.fill("input[name=\"password\"]", "密码")

# Click button:has-text("Login")
page.click("button:has-text(\"Login\")")
# assert page.url == "http://www.glidedsky.com/"

# 获得登录后 cookie
storage = context.storage_state()
with open("cookie.json", "w") as f:
    f.write(json.dumps(storage))

page.close()

context.close()
browser.close()

with sync_playwright() as playwright:
run(playwright)

四、获取网页的HTML

在 Playwright 中,可以使用 page.content() 方法获取当前页面的 HTML 内容。以下是一个简单的例子,展示如何使用 Playwright 获取一个网页的 HTML:

import asyncio  
from playwright.async_api import async_playwright  
  
async def main():  
    async with async_playwright() as p:  
        browser = await p.chromium.launch()  
        page = await browser.new_page()  
        await page.goto('https://example.com')  
        html = await page.content()  
        print(html)  
  
asyncio.run(main())

在上面的例子中,我们首先创建一个 Playwright 实例,然后启动一个 Chromium 浏览器。接下来,我们创建一个新的页面,并导航到 https://example.com。最后,我们使用 page.content() 方法获取当前页面的 HTML 内容,并将其打印出来。

请注意,page.content() 方法返回的是一个字符串,其中包含了整个 HTML 文档的内容。如果你需要获取某个特定元素的 HTML 代码,可以使用 page.evaluate() 方法执行 JavaScript 代码,然后使用 Playwright 的 DOM API 来获取元素的 HTML。例如,以下代码演示了如何获取一个页面的标题元素:

import asyncio  
from playwright.async_api import async_playwright  
  
async def main():  
    async with async_playwright() as p:  
        browser = await p.chromium.launch()  
        page = await browser.new_page()  
        await page.goto('https://example.com')  
        title_element = await page.query_selector('h1')  
        title_html = await p.evaluate(title_element, fn)  
        print(title_html)  
  
asyncio.run(main())

标签:playwright,Python,await,笔记,Playwright,import,async,page,browser
From: https://www.cnblogs.com/pddeditor/p/18681299

相关文章

  • python import 思考二
    前言思考一中简单介绍了import导入模块时的检索机制然而在实际的导入时,我们经常会导入失败,尤其是在相对导入时。下面就绝对导入和相对导入时发生的一些问题进行记录和思考文件目录结构my_project/|--package1/| |--subpackage1/| | |--module2.py| |--module......
  • Python进阶:深入理解import机制与importlib的妙用
    目录一、Pythonimport机制概述1.1import语句的基本用法1.2模块缓存机制1.3导入搜索路径1.4导入钩子和查找器二、importlib的妙用2.1动态模块导入2.2使用importlib实现插件系统2.3重新加载模块三、总结在Python编程的世界里,import语句是开发者最常用的工......
  • Python识别处理验证码技术详解
    目录一、验证码的种类二、OCR技术简介三、使用OCR技术识别验证码1.安装所需库2.下载和处理验证码图片3.使用OCR进行识别4.完整代码示例四、处理复杂验证码五、案例:识别古诗文网验证码六、总结验证码作为一种常见的安全手段,广泛应用于各种网站和应用中,以防止......
  • uos 开发笔记
    versionGLIBCXX_3.4.26notfound的问题解决一查看是否有这个库/lib64/libstdc++.so.6二查看这个库/lib64/libstdc++.so.6中的的GLIBCXX的支持的版本 经查看是环境里已经有这个库,并且是个软连接,软连接到libstdc++.so.6.0.19 查看这个库/lib64/libstdc++.so.6中的的GLIBCX......
  • Maui学习笔记-系统主题切换
    Maui提供了一种根据当前应用程序主题设置属性的机制,但是它不包含用于在UI中切换主题的组件,需要我们自行创建。创建项目 首先创建一个ThemeInfo类来存储应用程序主题对象及标题。这些对象会在Picker元素中显示。添加CommunityToolkit.Mvvm工具包,创建一个ThemeSettings主......
  • Python 列表推导和生成器表达式的区别点
    列表推导(ListComprehensions)和生成器表达式(GeneratorExpressions)在Python中有着相似的语法,但它们的行为和用途有所不同。以下是两者之间的主要区别:1.内存使用列表推导:创建一个完整的列表,所有元素都会被立即计算并存储在内存中。squares_list=[x**2forxinrange(1......
  • Python 实战-优化排班表节省成本
    1.基础概念:理解排班表排班表,顾名思义,就是安排员工工作时间的表格。在餐馆中,它通常需要考虑员工的可用性、工作时间限制、用餐高峰时段等因素。2.使用列表存储员工信息首先,我们需要一个数据结构来存储员工信息。Python中的列表是一个不错的选择。#员工信息列表,包括姓名、......
  • 阅读笔记二
    团队管理与协作的艺术核心内容摘要:团队角色与职责:分析了软件开发团队中常见的角色,如项目经理、产品经理、开发人员、测试人员等,并讨论了各自的责任和协作方式。沟通与合作:强调了有效的沟通对于团队成功的关键作用,介绍了面对面会议、邮件、即时通讯等多种沟通渠道的选择与运用。......
  • JavaScript笔记APIs篇02——DOM事件
     黑马程序员视频地址:黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source=0a2d366696f87e241adc64419bf12cab&spm_id_from=333.788.videopod.episodes&p=78 目录事件监听(绑定)事件监听其他版本(了解)事件类型事件对象......
  • [oeasy]python062_提示符是怎么来的_[词根溯源]prompt_input_输入函数_提示符
    提示符是怎么来的_[词根溯源]prompt_input_输入函数_提示符回忆上次内容上次讲的是从键盘输入变量的值 input函数可以接收到输入字符串存在变量里   添加图片注释,不超过140字(可选) input函数的参数叫prompt......