playwright使用方法


前言

本文只是记录本人学习使用playwright时所用到的方法,以及遇到的bug


一、playwright的异步操作

  • 异步启动playwright
    • 官方写法:
      import asyncio
      from playwright.async_api import async_playwright
      
      async def main():
          async with async_playwright() as p:
              iphone_11 = p.devices['iPhone 11 Pro']
              browser = await p.chromium.launch()
              context = await browser.new_context(
                  **iphone_11,
                  locale='de-DE',
                  geolocation={ 'longitude': 12.492507, 'latitude': 41.889938 },
                  permissions=['geolocation'],
                  color_scheme='dark',
              )
              page = await browser.new_page()
              await browser.close()
      
      asyncio.run(main())
      
      使用async with async_playwright() as p的方式创建playwright对象有一个缺点,p只在当前函数(即代码片中的main)内有效,当跳出函数时无法再调用该playwright对象,以及使用该对象打开的浏览器进程,浏览器进程会自动关闭。
  • 解决方法:
    使用playwright = await async_playwright().start(),可以将playwright定义为类的成员变量,在类对象释放之前都可以对该playwright创建的浏览器进程进行操作,代码示例(启动火狐浏览器):
    self.playwright = await async_playwright().start()
    self.browser = await self.playwright.firefox.launch()
    self.content = await self.browser.new_context()
    

二、playwright的selector操作

进行网页自动化操作时,选择网页元素是很常用的方法。其他自动化库如selenium、pyppeteer支持的选择器只有css selectorxpath,碰到自动生成的网页,即网页标签属性(id ,class等)是通过js算法生成的网页时,这两个选择器很难选择到想要的网页元素。
playwright提供了多种选择器类型
官方文档: selector
支持的选择器类型


最常用的选择器:

  1. text seletcor
    示例:
    await page.locator("text=Log in").click()
    
  2. Select by attribute, with css selector
    示例:
    await page.locator("[data-test=login-button]").click()
    await page.locator("[aria-label='Sign in']").click()
    
  3. 通过自动生成代码找到网页元素
    tips:该方法适用于不知道怎么定位标签的情况,或者是偷懒不想自己找标签selector时
    在代码中加入await page.pause, 运行到这一行时会暂停网页,可以记录你在网页上的操作(比如点击页面,页面跳转等操作)
    在这里插入图片描述
    点击Record可以开始录制代码:
    在这里插入图片描述
    点击resume会继续执行代码,并且可以监视在页面上进行单步操作的耗时

绕过网页自动化特征值的检测

使用到的第三方库及安装方法:

  1. 安装playwright_stealth
    直接使用pip命令行安装

    pip install playwright_stealth
    

    playwright_stealth的github地址

  2. 使用方法

    import asyncio
    from playwright.async_api import async_playwright
    from playwright_stealth import stealth_async
    
    async def main():
        async with async_playwright() as p:
            for browser_type in [p.chromium, p.firefox, p.webkit]:
                browser = await browser_type.launch()
                page = await browser.new_page()
                await stealth_async(page)
                await page.goto('http://whatsmyuseragent.org/')
                await page.screenshot(path=f'example-{browser_type.name}.png')
                await browser.close()
    
    asyncio.get_event_loop().run_until_complete(main())
    
  3. 执行结果:
    使用playwright的浏览器访问下面的网站
    绕过特征值效果:
    执行结果

    测试地址

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您好!对于使用 PythonPlaywright 库实现免登录的功能,您可以按照以下步骤进行操作: 1. 首先,确保已经安装了 Playwright 库。您可以使用以下命令进行安装: ``` pip install playwright ``` 2. 导入所需的模块,并创建一个 Playwright 的浏览器实例: ```python from playwright.sync_api import sync_playwright with sync_playwright() as playwright: browser = playwright.chromium.launch() page = browser.new_page() ``` 3. 在浏览器页面中,可以使用 Playwright 提供的各种方法进行页面操作,例如导航到登录页面、填写表单等。具体的操作取决于您要访问的网站。 4. 如果网站使用了 Cookie 或者 Session 来保存登录状态,您可以使用 Playwright 的 `context` 对象来保存和复用这些信息,达到免登录的效果。例如: ```python # 创建一个新的上下文 context = browser.new_context() # 在上下文中进行页面操作 page = context.new_page() page.goto('https://example.com') # 登录并获取到 Cookie login_and_get_cookie() # 将 Cookie 应用到当前的页面 for cookie in get_saved_cookie(): page.set_cookie(cookie) # 访问其他需要登录才能访问的页面 page.goto('https://example.com/protected') # 关闭上下文和浏览器 page.close() context.close() browser.close() ``` 请注意,这只是一个简单的示例,具体的实现方式会根据网站的登录机制和页面结构有所不同。您需要根据实际情况进行相应的调整和处理。 希望以上信息能对您有所帮助!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值