python自动化测试之Playwright使用

前两天接到了一个爬取网站的需求,而且刚好听说微软出了一个自动化的框架playwright,就尝试一下。

安装

官网
python版官网
目前playwright支持用node和python两种编程语言,之后也会做java和c#的实现。

# 安装playwright
pip install playwright

# 安装需要的浏览器驱动,支持chrome,firefox和webkit三种浏览器驱动
python -m playwright install

使用

# 演示程序爬取一个网页中表格的全部数据

# 使用同步的API
from playwright.sync_api import sync_playwright

# 用作类型标注,方便IDE提示
from typing import List
from playwright.sync_api import Browser, Page


# 获取表格中的数据
def extract_table_data(page: Page) -> "List[str]":
    temp = []
    # 选用所有符合条件的元素
    for cell in page.query_selector_all("#foreach td"):
        # element.textContent函数,获得元素内的文字
        temp.append(cell.text_content().strip())

    for i in range(9):
        for cell in page.query_selector_all(f"#foreach_{
       i} td"):
            temp.append(cell.text_content().strip())

    return temp


# 表格有三列,需要把一个列表拆分成三个
def split_lines(origin_list: list, list_len: int) -> List:
    return [origin_list[i:i + list_len] for i in range(0, len(origin_list),
                                                       list_len)]


def main():
    with sync_playwright() as playwright:
        # 创建浏览器,使用chrome浏览器,无痕模式
        browser: Browser = playwright.chromium.launch(headless=True)

        # 创建新页面
        page: Page = browser.new_page()
        page.goto(
            "http://femhzs.mofcom.gov.cn/fecpmvc/pages/fem/CorpJWList.html")

        # 等待加载完毕,之后截个图
        page.wait_for_load_state("networkidle")
        page.screenshot(path="./screenshot.jpg", type="jpeg")

        # 抽取数据并输出到控制台上
        table = extract_table_data(page)
        line: List[str]
        for line in split_lines(table, 3):
            print(line[0] + "-" + line[1] + "-" + line[2])

        # 关闭浏览器
        browser.close()


if __name__ == "__main__":
    main()

其他功能

选择器

支持文字搜索,css选择器,xpath等各种选择器。详细说明在官方文档

page.query_selector(selector)

接受一个选择器作为参数,返回一个元素,元素可以进行click,fill等操作

page.query_selectorAll(selector)

同样接受一个选择器,返回符合条件的元素列表

page.fill(selector, text)

选择符合条件的第一个元素,输入文字

page.click(selector) / page.dblclick(selector)

按下/双击符合条件的第一个元素

录制脚本

# 访问维基百科然后录制脚本
playwright codegen wikipedia.org

备注

2021-10-09 Playwright API发生变动,原来camelcase风格的方法变成了python风格snake_case风格

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