第二春?令人惊喜的selenium项目selenium base
最近发现 github 月热门项目里有个老面孔 selenium base 在短期内获得了比较大的关注。
这个项目存在的时间应该有好多年了,我记得当初似乎也写过文章去介绍。
本以为这就是一个普通的结合 pytest 和 selenium 封装的测试框架,不料几年过去项目的发展似乎渐入佳境。
这次最让我眼前一亮的功能是 selenim base 支持绕过 Cloudflare 的访问校验。
新的爬虫利器?
用 selenium 写过爬虫的同学可能都会对 Cloudflare 的访问校验感到头痛。
简单来说,在你访问目标站点的时候,cloudflare 会自动校验此次访问是不是来自不明的 ip 或者设备,如果是用脚本去访问该站点的话,cloudflare 会直接进行拦截,不展示网页的内容。
不过 selenium base 却用几行代码打破了这一桎梏。
from seleniumbase import SB
with SB(uc=True, test=True, locale_code="en") as sb:
url = "https://gitlab.com/users/sign_in"
sb.activate_cdp_mode(url)
sb.uc_gui_click_captcha()
sb.sleep(2)
用什么工具写爬虫其实无关紧要,爬虫进入深水区的时候往往需要跟反爬策略做各种对抗。
由于 selenium 本身使用了真实的浏览器进行网页访问,自带光环,可以绕过很多的反爬策略。
但是 cloudflare 的前置拦截却一直没有稳定的解决方案,selenium base 提供了绕过校验的便利,看上去非常利好爬虫的发挥。
其他有意思的特性
支持录制
文档在这里。https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/recorder_mode.md
因为 selenium base 暴露出来的 api 比较有限,所以录制出的代码可用性相对较高。
可以把用例转换成 markdown 的表格模式
这里的路子跟 robot framework 是反着来的。
把代码转成了更容易阅读的表格,对用例评审来说还是很有用的。
https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/case_plans.md
智能等待
selenium base 的 api 很多都是操作类型的,比如 click,type 之类,在进行操作时 selenium base 会进行智能等待,从而提升用例的稳定性。