Python操作Playwright的流程

Python操作Playwright的流程分为以下几步:

  1. 安装Playwright库:在开始之前,需要安装Playwright库。使用Python包管理器pip可以轻松安装Playwright:
pip install playwright
  1. 安装浏览器驱动:Playwright支持Chromium、Firefox和WebKit三种浏览器,需要安装所需的浏览器驱动。可以通过以下方式安装:
  • 安装Chromium驱动:

    playwright install
    

    安装完成后,可以在~/.playwright目录下找到Chromium驱动。

  • 安装Firefox驱动:

    playwright install firefox
    

    安装完成后,可以在~/.playwright目录下找到Firefox驱动。

  • 安装WebKit驱动:

    playwright install webkit
    

    安装完成后,可以在~/.playwright目录下找到WebKit驱动。

  1. 初始化浏览器:可以使用以下代码初始化浏览器:
from playwright.sync_api import Playwright, sync_playwright

with sync_playwright() as playwright:
    browser = playwright.chromium.launch()
    page = browser.new_page()

    # 在此执行一些操作

    browser.close()

这段代码使用Chromium浏览器初始化了Playwright,并打开了一个新页面。可以通过修改playwright.chromium.launch()中的参数来打开不同的浏览器,如使用Firefox可以使用playwright.firefox.launch()

  1. 操作浏览器:通过获取page对象来对浏览器进行操作,例如:
  • 打开网页:

    page.goto('https://www.example.com/')
    
  • 在表单中输入文本:

    page.fill('#input', 'example text')
    
  • 点击按钮:

    page.click('button')
    
  • 获取元素属性:

    text = page.get_attribute('span', 'textContent')
    
  • 截图:

    page.screenshot(path='example.png')
    
  • 等待元素出现:

    page.wait_for_selector('#element')
    
  • 等待页面加载完成:

    page.wait_for_load_state('networkidle')
    

    可以通过修改第二个参数来选择等待状态,如'domcontentloaded'表示DOM内容加载完成。

  1. 关闭浏览器:在完成操作后,需要关闭浏览器以释放资源。使用以下代码关闭浏览器:
browser.close()

以上就是Python操作Playwright的流程,其中每个参数都有相应的详细说明。需要注意的是,在使用Playwright时需要安装所需的浏览器驱动并正确初始化浏览器才能进行操作。

  1. 补一个关于根据某标签属性截图的代码
# -*- coding: utf-8 -*-
# @Author   : yueyue
# @Time     : 2023-08-30 17:21
from playwright.sync_api import sync_playwright as playwright
import logging
import colorlog

logger = logging.getLogger()
logger.setLevel(logging.INFO)
handler = colorlog.StreamHandler()
handler.setLevel(logging.INFO)
formatter = colorlog.ColoredFormatter('%(log_color)s[%(asctime)s] - %(levelname)s: %(message)s',
                                      datefmt='%Y-%m-%d %H:%M:%S')
handler.setFormatter(formatter)
logger.addHandler(handler)


def image_save(link: str, name: str, proxy: bool, rules: str):
	"""
	link  需要截图的链接
	name  图片名称
	proxy 是否需要使用代理
	rules 是否截取标签内的
	"""
    logger.info(name + '<>' + link + '<>' + rules + '<>' + str(proxy))
    proxyUrl = '代理'
    try:
        with playwright() as pw:
            webkit = pw.webkit.launch(headless=True)
            if proxy:
                context = webkit.new_context(proxy={'server': proxyUrl})
            else:
                context = webkit.new_context()  
            page = context.new_page()  
            page.goto(link)
            if rules:
                img_element = page.wait_for_selector(rules)
                img_bounding_box = img_element.bounding_box()

                page.wait_for_load_state('networkidle')
                page.screenshot(path=f'image/{name}.png', clip=img_bounding_box, full_page=True)  # full_page=True
            else:
                page.wait_for_load_state('networkidle')
                page.screenshot(path=f'image/{name}.png', full_page=True)  # full_page=True
            context.close()
            webkit.close()
            return {'status_code': 200}
    except Exception as f:
        return {'status_code': 400}


if __name__ == '__main__':
    link = "https://www.plap.cn/index/selectArticleNewsById.do?id=5F4FC87FF4674F9FA1FDCB655DE4E08F"
    logger.info(image_save(link=link, name='111', proxy=False, rules='div[class="clear margin-top-20 new_content"]'))

你可能感兴趣的:(python,工具,python)