如何提取Playwright录制文件中的元素定位信息_第1页
如何提取Playwright录制文件中的元素定位信息_第2页
如何提取Playwright录制文件中的元素定位信息_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第如何提取Playwright录制文件中的元素定位信息我这里主要用到了ast的parsewalkdump三个方法,parse方法将脚本转化为抽象语法树,walk用来遍历整个抽象语法树(类似xml遍历),dump用于调试和将无法解析的内容直接输出,其实这里可以使用unparse或通过linenocol_offsetend_linenoend_col_offset这四个属性定位到源码,但是这些都需要较高的python版本才有,我现在项目中使用的python3.7版本中还没有这些,只能先用dump代替(当然,也是我比较偷懒)。代码如下:

importast

frominspectimportsignature

fromplaywright.sync_apiimportPage

import_num=0

dup_num=0

result=[]

withopen('playwright录制脚本','rb')asf:

root=ast.parse(f.read())

parse_methods=set()

foriindir(Page):

ifnoti.startswith('_'):

attr=getattr(Page,i)

ifcallable(attr):

sign=signature(attr).parameters

if'selector'insign:

parse_methods.add(i)

fornodeinast.walk(root):

ifisinstance(node,ast.Call):

ifisinstance(node.func,ast.Attribute)and\

node.func.attrinparse_methods:

iflen(node.args)==0:

continue

selector=node.args[0]

ifisinstance(selector,ast.Str):

selector=selector.s

elifisinstance(selector,ast.Name):

selector=f'变量:{selector.id}'

else:

selector=f'无法解析:{ast.dump(selector,False)}'

frame_locator=None

ifisinstance(node.func.value,ast.Call)and\

isinstance(node.func.value.func,ast.Attribute)and\

node.func.value.func.attr=='frame':

iflen(node.func.value.args)0:

frame_locator=str(node.func.value.args[0])

else:

frame_node=node.func.value.keywords[0].value

ifisinstance(frame_node,ast.Str):

frame_locator=frame_node.s

elifisinstance(frame_node,ast.Name):

frame_locator=f'变量:{frame_node.id}'

else:

frame_locator=f'无法解析:{ast.dump(frame_node,False)}'

foriinresult:

ifselector==i[0]andframe_locator==i[1]:

dup_num+=1

break

else:

result.append((selector,frame_locator))

print(f"{selector},{frame_locator}{node.func.attr=='query_selector_all'}")

import_num+=1

print(f'成功解析{import_num}条定位信息,跳过{dup_num}条重复信息')

代码解析

代码中很多地方用到了isinstance方法来判断节点是什么类型,因为需要解析的内容都是page.click('...')或page.frame('...').click('...')形式,所以大多数时候需要提取Call对象的func的attr属性即为所需要的定位信息。另外使用了inspect库来提取可能需要解析的方法,如click

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论