2023年6月29日发(作者:)
爬⾍:selenium、pyppeteer、playwright浏览器驱动对⽐及应⽤实践1. Selenium1.1. Selenium 简介Selenium是最⼴泛使⽤的开源Web UI(⽤户界⾯)⾃动化测试套件之⼀。它最初由杰森·哈⾦斯(Jason Huggins)于2004年开发,作为Thought Works的内部⼯具。Selenium⽀持跨不同浏览器,平台和编程语⾔的⾃动化。Selenium可以轻松部署在Windows,Linux,Solaris和Macintosh等平台上。此外,它⽀持IOS(IOS,Windows Mobile和Android)等移动应⽤程序的OS(操作系统)。Selenium通过使⽤特定于每种语⾔的驱动程序⽀持各种编程语⾔。Selenium⽀持的语⾔包括C#,Java,Perl,PHP,Python和Ruby。⽬前,Selenium Web驱动程序最受Python和C#欢迎。Selenium测试脚本可以使⽤任何⽀持的编程语⾔进⾏编码,并且可以直接在⼤多数现代Web浏览器中运⾏。 Selenium⽀持的浏览器包括Internet Explorer,Mozilla Firefox,Google Chrome和Safari。1.2. Selenium 优缺点:selenium ⽀持多款主流浏览器,提供了功能丰富的API 接⼝,经常被我们⽤作爬⾍⼯具来使⽤;但是 selenium 缺点也很明显,⽐如速度太慢、对版本配置要求严苛,最⿇烦是经常要更新对应的驱动。还有些⽹页是可以检测到是否是使⽤了selenium ;并且selenium 所谓的保护机制不允许跨域 cookies 保存,登录的时候必须先打开⽹页然后后加载 cookies 再刷新的⽅式很不友好。1.3. Selenium 使⽤实践1.3. Selenium 使⽤实践略2. Pyppeteer2.1. Pyppeteer 简介Pyppeteer 是⼀款⾮常⾼效的 web ⾃动化测试⼯具,是 Puppeteer 的 Python 版本,pyppeteer 只是在 puppeteer之上稍微包装了下⽽已;Puppeteer 是 Google 基于 开发的⼀个⼯具,主要是⽤来操纵 Chrome 浏览器的 API,通过 Javascript 代码来操纵 Chrome 浏览器的⼀些操作,⽤作⽹络爬⾍完成数据爬取、Web 程序⾃动测试等任务,其 API 极其完善,功能⾮常强⼤。Pyppeteer 可以实现的功能包括:-- ⽣成页⾯截图或 PDF;-- 抓取 SPA 并⽣成预渲染内容(SSR);-- ⾃动化表单提交、UI 测试,键盘输⼊ 等;-- 创建最新的⾃动化测试环境,使⽤最新的 JavaScript 和浏览器功能直接在最新版本的 Chrome 中运⾏测试;-- 捕获站点的时间线跟踪,以帮助诊断性能问题;-- 测试 Chrome 扩展程序。2.2. Pyppeteer 优缺点Pyppeteer 虽然⽀持的浏览器⽐较单⼀,但在安装配置的便利性和运⾏效率⽅⾯都要远胜 selenium;Pyppeteer 的 web ⾃动化是基于 chromium 来实现的,由于 chromium 中某些特性的关系,Pyppeteer 的安装配置⾮常简单;Pyppeteer ⽀持 asyncio 异步协程,对于并发⽐较友好;但是,Pyppeteer 是第三⽅的,好久没有更新了,bug 也不少;Pyppeteer 所依赖的 Puppeteer 的原⽣ JS 版本,本⾝就很不稳定;2.3. 使⽤实践# _*_coding:utf-8 _*_# @Software: PyCharm# @FileName: # @Time : 2021/6/18 19:54# @Desc :import osimport timefrom import urlsplitimport asyncioimport pyppeteerBASE_DIR = e(__file__)"""intercept_request和intercept_response相当于是注册的两个回调函数,在浏览器发出请求和获取到请求之前指向这两个函数。"""async def intercept_request(req): """请求过滤""" if ceType in ['image', 'media', 'eventsource', 'websocket']: await () else: await ue_()async def intercept_response(res): """返回过滤""" resource_type = ceType if resource_type in ['xhr', 'fetch']: resp = await () url = tokens = urlsplit(url) folder = BASE_DIR + '/' + 'data/' + + + "/" if not (folder): rs(folder, exist_ok=True) filename = (folder, str(int(())) + '.json') with open(filename, 'w', encoding='utf-8') as f: (resp)async def main(): browser = await ({ # 'headless': False, # 'devtools': True 'executablePath': '/Users/changjiang/apps//Contents/MacOS/Chromium', 'args': [ '--disable-extensions', '--hide-scrollbars', '--disable-bundled-ppapi-flash', '--mute-audio', '--mute-audio', '--no-sandbox', '--disable-setuid-sandbox', '--disable-gpu', ], 'dumpio': True, }) page = await e() await uestInterception(True) ('request', intercept_request) ('response', intercept_response) await rAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299') await wport({'width': 1080, 'height': 960}) await ('') await te(""" () =>{ Properties(navigator,{ webdriver:{ get: () => false } }) } """) await iptTag(path="path_to_your_js_file") # 加载⼀个 js ⽂件 await te("你的那⼀段页⾯⾃动下拉 js 脚本") await ()if __name__ == '__main__': (main())3. Playwright3.1. Playwright 简介playwright-python,是⼀款基于python的⾃动化测试⼯具,可以通过录制功能⾃动⽣成测试脚本;Playwright是⼀个强⼤的Python库,仅⽤⼀个API即可⾃动执⾏Chromium、Firefox、WebKit(Safari )等主流浏览器⾃动化操作,并同时⽀持以⽆头模式、有头模式运⾏;3.2. Playwright 优缺点Playwright 具有以下优点:跨浏览器,⽀持Chrome、Firefox、WebKit;跨系统,⽀持Windows、Mac、Linux;跨语⾔,⽀持Python、Java、JS;可⽤于移动端。3.3.选项: -V, --version 输出版本号 -b, --browser
发布者:admin,转转请注明出处:http://www.yc00.com/web/1687982837a63561.html
评论列表(0条)