前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不写一行代码实现自动化(二)

不写一行代码实现自动化(二)

作者头像
赵云龙龙
发布2021-03-16 11:10:27
1.1K0
发布2021-03-16 11:10:27
举报
文章被收录于专栏:python爱好部落

最近好多小伙伴后台留言询问关于playwright的一些问题,在这里我大概说一下我自己的感受。

最开始我是没怎么看文档的,就是凭自己的感觉在浪,有问题去看度娘。结果发现度娘上的东西都是最简单入门的,告诉你如何安装,如何录制就完事了。 自己在使用的过程中,发现我有两个问题不太好解决。

第一个是弹框子, 第二个是获取某个元素的text。 这个是度娘上搜不到的,自己折腾了很久,差点放弃了。 然后我去看文档: https://playwright.dev/python/docs/intro/ 发现文档上很全 然后还是没解决我的问题,后面我又去看源码: https://github.com/2926295173/playwright-python/blob/master/playwright/page.py 终于发现如果获取text,可以用:

代码语言:javascript
复制
page.innerText()

想想大名鼎鼎的microsoft,不会做出这么粗糙的东西,只是我们没找到它的方法。

如果要学一个东西,最好是看官方文档或者是源码。 文档是英文的,我这里简单总结一下。

定位元素:

可以看这一章

Playwright可以使用CSS选择器、XPath选择器、HTML属性(如id、data-test-id,甚至文本内容)来搜索元素。只需直接使用即可,可以自动探测

简写 选择器以// 或者..开头,则会默认为是xpath=selector 例子:page.click('//html') 可转换为 page.click('xpath=//html') 选择器开始和结束以引号("或者'),则默认为text=selector 例子:page.click(' "foo" ') 可转换为 page.click('text="foo"') 其他的默认为是css=selector 例子:page.click('div') 可转换为 page.click('css=div') 链式选择器 选择器可以与>>组合使用,例如selector1 >> selector2 >> selectors3。当选择器被链接时,下一个选择器会相对于前一个选择器的结果进行查询。

例如:

代码语言:javascript
复制
page.querySelector('css=article >> css=.bar > .baz >> css=span[attr=value]')

等同于:

代码语言:javascript
复制
page.querySelector('article').querySelector('.bar > .baz').querySelector('span[attr=value]')

css=article >> text=Hello查找文本为Hello的 article 元素;*css=article >> text=Hello查找包含文本Hello的 article 元素. 你可以用browser的inspect工具来查看元素。 感觉playwright查找元素更灵活,省去了各种find_element_by_xxx

等待:

playwright比webdriver好用的地方,就是各种等待不需要自己去指定,selenium有的,它都有,感觉它就是集成了各种框架的优点 如果查找元素,可以用

代码语言:javascript
复制
page.query_selector()
page.query_selector_all()

如果你想要一个超时时间:

代码语言:javascript
复制
page.wait_for_selector("text=Generate Security Code",timeout=1000):

这里的时间是毫秒。 你也可以根据状态来判断元素是否加载,看这块的文档

弹框:

我最开始遇到就是这个拦路虎,虽然录制时有代码,但是运行的时候总是不通过。 文档这句话提醒了我. By default, dialogs are auto-dismissed by Playwright, so you don't have to handle them. However, you can register a dialog handler before the action that triggers the dialog to accept or decline it.

代码语言:javascript
复制
page.on("dialog", lambda dialog: dialog.accept())
page.click("button")

我在录制的基础上,然后又加了代码点击了一下,出来了框子,然后再处理的。后面发现不是很稳定,运行速度太快了,加了等待一秒,彻底解决问题。

调试

运行的时候,看看哪里除了问题,可以用来调试:

代码语言:javascript
复制
# Linux/macOS
$ PWDEBUG=1 pytest -s

# Windows
$ set PWDEBUG=1
$ pytest -s

其实在录制的时候,就有调试界面。 这个对定位问题,还是很有帮助的,有点像cypress

单步执行,就可以定位到问题。

运行

这个框架默认是pytest的,你可以这样安装

代码语言:javascript
复制
pip install pytest-playwright

运行时就可以:

代码语言:javascript
复制
# Run tests (Chromium and headless by default)
pytest

# Run tests in headful mode
pytest --headful

# Run tests in a different browser (chromium, firefox, webkit)
pytest --browser firefox

# Run tests in multiple browsers
pytest --browser chromium --browser webkit

当然你也可以不用框架,运行的时候直接用python也是可以的。debug也可以,亲自实验且通过的。

最后

其实你扫一遍文档,就知道这个工具的使用了。如果需要查方法,或者东西,可以去文档搜。

相关的东西都能列出来,比去源码里面搜要高效很多。 playwright有微软这棵大树,估计会发展得很好。当然它还在完善,我们期待它能更加完美。也许它发展好了,好多人会被淘汰了。 Stay Hungry, Stay Foolish! 坚持学习,争取不被淘汰。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python粉丝团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定位元素:
  • 等待:
  • 弹框:
  • 调试
  • 运行
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档