概述
前两天接到了一个爬取网站的需求,而且刚好听说微软出了一个自动化的框架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自动化测试之Playwright使用的全部内容,希望文章能够帮你解决python自动化测试之Playwright使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复