playwright教程 (一)适合小白

一、playwright简介

playwright是微软发布的一款自动化测试工具,可以自动生成代码

在学习playwright前可以了解playwright文档,目前只有英文版!

1.playwright简介

pip install --upgrade pip
pip install playwright
playwright install

 2.基本使用

import xlwt
# 导入sync_playwright方法
from playwright.sync_api import sync_playwright
# 定义run()方法 
def run(playwright):
    # 调用playwright的chromium创建浏览器实例,脚本运行需要首先打开浏览器实例
    # 如果不设置为 False,默认是无头模式启动浏览器,我们看不到任何窗口
    browser = playwright.chromium.launch(headless=False)
    # 创建context对象,context运行资源是单独隔离的,可以理解为轻量级的浏览器实例
    context = browser.new_context()
    # 返回page对象,新建页面
    page = context.new_page()
    # 加载豆瓣网页面
    page.goto("https://movie.douban.com/")
   

3.独特功能,自动生成(一段即可)

playwright codegen -o baidu.py 

-o 后面是代码自动生成后保存的文件名

二、练习豆瓣电影TOP10,并生成Excel表格

1.了解选择器

在playwright中选择器可以使用CSS选择器,xpath选择器,后者也可应用于其他python库

xpath教程可参考菜鸟(东西不多,一些规则,一看就懂)

# 使用CSS选择器选定电影榜单位置
    names = page.query_selector_all("#billboard > div.billboard-bd > table > tbody > tr > td > a")
    # 使用xpath选择器获取
    # names = page.query_selector_all("//*[@id='billboard']/div[2]/table/tbody/tr/td/a")

两个选择器本质是一样的,xpath选择器可以更直观

2.利用选择器在F12开发者根据中找到所需数据位置

 选择器选择所需元素范围不要太大(太大的话也可以获取,但就比较麻烦,像获取TOP10数据这种,有规律的,可以选择每个小标签就可以),如上图a标签.,10个a标签,正好对应10条数据。

    # 新建列表  用于存储电影名字和链接
    listName = []
    # 因电影榜单数据都为<tr><td>样式,遍历每一条样式
    for name in names :
        # 获取a节点中的电影名字
        content = name.text_content()
        # 获取a节点中的电影链接
        link = name.get_attribute("href")
        # 将每行字符串追加到列表中
        listName.append((content,link))
        print(content,link)
    print(listName)

接着遍历这10条数据,每一条name就是一个<a>标签,利用

name.text_content() 拿到标签的文本
name.get_attribute("href")拿到标签中href属性的值

可以打印出来试试看,我就不示范了

3.保存到Excel中

再保存前考虑,创建excel,表名,表头,单元格大小

 # 创建wordbook对象
    workbook = xlwt.Workbook(encoding = 'utf-8')
    # 创建工作表
    worksheet = workbook.add_sheet('豆瓣电影TOP10')
    # 设置工作表的表头,write(行,列,值)
    worksheet.write(0, 0, label="豆瓣电影TOP10")
    worksheet.write(2, 0, label="名称")
    worksheet.write(2, 1, label="链接")
    # 设置单元格宽度
    worksheet.col(0).width = 4000
    worksheet.col(1).width = 10000

将上述的listName遍历,这里采用enumerate方法,可以遍历出索引和数据,通过索引控制excel中的行和列更方便

 for i,items in enumerate(listName):
        # print(i,items)
        # 将获取到的items写入excel中    write(行,列,值)
        worksheet.write(i+3, 0, items[0])
        worksheet.write(i+3, 1, items[1])
    #     保存工作表
    workbook.save('Excel_test.xls')

关闭浏览器,页面,

    page.close()
    context.close()
    browser.close()
#调用sync_playwright方法,返回浏览器上下文管理器,赋值为p
with sync_playwright() as playwright:
    run(playwright)

三、总结

这里使用的是模拟浏览器获取,代码还是比较初级,主要体验将获取的数据存储excel的过程,后续会更新通过接口获取,获取不同页面的数据等。。。

来源:小白白学爬虫

物联沃分享整理
物联沃-IOTWORD物联网 » playwright教程 (一)适合小白

发表评论