专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

自动化无痕浏览器对比测试,PlayWrightVsSelen

  也许每一个男子全都有过这样的两个女人,至少两个。娶了红玫瑰,久而久之,红的变了墙上的一抹蚊子血,白的还是床前明月光;娶了白玫瑰,白的便是衣服上沾的一粒饭黏子,红的却是心口上一颗朱砂痣。张爱玲《红玫瑰与白玫瑰》
  Selenium一直都是Python开源自动化浏览器工具的王者,但这两年微软开源的PlayWright异军突起,后来者居上,隐隐然有撼动Selenium江湖地位之势,本次我们来对比PlayWright与Selenium之间的差异,看看曾经的玫瑰花Selenium是否会变成蚊子血。PlayWright的安装和使用
  PlayWright是由业界大佬微软(Microsoft)开源的端到端Web测试和自动化库,可谓是大厂背书,功能满格,虽然作为无头浏览器,该框架的主要作用是测试Web应用,但事实上,无头浏览器更多的是用于Web抓取目的,也就是爬虫。
  首先终端运行安装命令:pip3installplaywright
  程序返回:SuccessfullybuiltgreenletInstallingcollectedpackages:pyee,greenlet,playwrightAttemptinguninstall:greenletFoundexistinginstallation:greenlet2。0。2Uninstallinggreenlet2。0。2:Successfullyuninstalledgreenlet2。0。2Successfullyinstalledgreenlet2。0。1playwright1。30。0pyee9。0。4
  目前最新稳定版为1。30。0
  随后可以选择直接安装浏览器驱动:playwrightinstall
  程序返回:DownloadingChromium110。0。5481。38(playwrightbuildv1045)fromhttps:playwright。azureedge。netbuildschromium1045chromiummacarm64。zip123。8Mb〔〕1000。0sChromium110。0。5481。38(playwrightbuildv1045)downloadedtoUsersliuyueLibraryCachesmsplaywrightchromium1045DownloadingFFMPEGplaywrightbuildv1008fromhttps:playwright。azureedge。netbuildsffmpeg1008ffmpegmacarm64。zip1Mb〔〕1000。0sFFMPEGplaywrightbuildv1008downloadedtoUsersliuyueLibraryCachesmsplaywrightffmpeg1008DownloadingFirefox108。0。2(playwrightbuildv1372)fromhttps:playwright。azureedge。netbuildsfirefox1372firefoxmac11arm64。zip69。8Mb〔〕1000。0sFirefox108。0。2(playwrightbuildv1372)downloadedtoUsersliuyueLibraryCachesmsplaywrightfirefox1372DownloadingWebkit16。4(playwrightbuildv1767)fromhttps:playwright。azureedge。netbuildswebkit1767webkitmac12arm64。zip56。9Mb〔〕1000。0sWebkit16。4(playwrightbuildv1767)downloadedtoUsersliuyueLibraryCachesmsplaywrightwebkit1767
  默认会下载Chromium内核、Firefox以及Webkit驱动。
  其中使用最广泛的就是基于Chromium内核的浏览器,最负盛名的就是Google的Chrome和微软自家的Edge。
  确保当前电脑安装了Edge浏览器,让我们小试牛刀一把:fromplaywright。syncapiimportsyncplaywrightimporttimewithsyncplaywright()asp:browserp。chromium。launch(channelmsedge,headlessTrue)pagebrowser。newpage()page。goto(http:v3u。cn)page。screenshot(pathf。examplev3u。png)time。sleep(5)browser。close()
  这里导入syncplaywright模块,顾名思义,同步执行,通过上下文管理器开启浏览器进程。
  随后通过channel指定edge浏览器,截图后关闭浏览器进程:
  我们也可以指定headless参数为True,让浏览器再后台运行:fromplaywright。syncapiimportsyncplaywrightwithsyncplaywright()asp:browserp。chromium。launch(channelmsedge,headlessTrue)pagebrowser。newpage()page。goto(http:v3u。cn)page。screenshot(pathf。examplev3u。png)browser。close()
  除了同步模式,PlayWright也支持异步非阻塞模式:importasynciofromplaywright。asyncapiimportasyncplaywrightasyncdefmain():asyncwithasyncplaywright()asp:browserawaitp。chromium。launch(channelmsedge,headlessFalse)pageawaitbrowser。newpage()awaitpage。goto(http:v3u。cn)print(awaitpage。title())awaitbrowser。close()asyncio。run(main())
  可以通过原生协程库asyncio进行调用,PlayWright内置函数只需要添加await关键字即可,非常方便,与之相比,Selenium原生库并不支持异步模式,必须安装三方扩展才可以。
  最炫酷的是,PlayWright可以对用户的浏览器操作进行录制,并且可以转换为相应的代码,在终端执行以下命令:pythonmplaywrightcodegentargetpythonoedge。pybchromiumchannelmsedge
  这里通过codegen命令进行录制,指定浏览器为edge,将所有操作写入edge。py的文件中:
  与此同时,PlayWright也支持移动端的浏览器模拟,比如苹果手机:fromplaywright。syncapiimportsyncplaywrightwithsyncplaywright()asp:iphone13p。devices〔iPhone13Pro〕browserp。webkit。launch(headlessFalse)pagebrowser。newpage()page。goto(https:v3u。cn)page。screenshot(path。v3uiphone。png)browser。close()
  这里模拟Iphone13pro的浏览器访问情况。
  当然了,除了UI功能测试,我们当然还需要PlayWright帮我们干点脏活累活,那就是爬虫:fromplaywright。syncapiimportsyncplaywrightdefextractdata(entry):nameentry。locator(h3)。innertext()。strip()。strip()capitalentry。locator(span。countrycapital)。innertext()populationentry。locator(span。countrypopulation)。innertext()areaentry。locator(span。countryarea)。innertext()return{name:name,capital:capital,population:population,area(kmsq):area}withsyncplaywright()asp:launchthebrowserinstanceanddefineanewcontextbrowserp。chromium。launch()contextbrowser。newcontext()openanewtabandgotothewebsitepagecontext。newpage()page。goto(https:www。scrapethissite。compagessimple)page。waitforloadstate(load)getthecountriescountriespage。locator(p。country)ncountriescountries。count()loopthroughtheelementsandscrapethedatadata〔〕foriinrange(ncountries):entrycountries。nth(i)sampleextractdata(entry)data。append(sample)browser。close()
  这里data变量就是抓取的数据内容:〔{name:Andorra,capital:AndorralaVella,population:84000,area(kmsq):468。0},{name:UnitedArabEmirates,capital:AbuDhabi,population:4975593,area(kmsq):82880。0},{name:Afghanistan,capital:Kabul,population:29121286,area(kmsq):647500。0},{name:AntiguaandBarbuda,capital:St。Johns,population:86754,area(kmsq):443。0},{name:Anguilla,capital:TheValley,population:13254,area(kmsq):102。0},。。。〕
  基本上,该有的功能基本都有,更多功能请参见官方文档:https:playwright。devpythondocslibrarySelenium
  Selenium曾经是用于网络抓取和网络自动化的最流行的开源无头浏览器工具之一。在使用Selenium进行抓取时,我们可以自动化浏览器、与UI元素交互并在Web应用程序上模仿用户操作。Selenium的一些核心组件包括WebDriver、SeleniumIDE和SeleniumGrid。
  关于Selenium的一些基本操作请移玉步至:python3。7爬虫:使用Selenium带Cookie登录并且模拟进行表单上传文件,这里不作过多赘述。
  如同前文提到的,与Playwright相比,Selenium需要第三方库来实现异步并发执行,同时,如果需要录制动作视频,也需要使用外部的解决方案。
  就像Playwright那样,让我们使用Selenium构建一个简单的爬虫脚本。
  首先导入必要的模块并配置Selenium实例,并且通过设置确保无头模式处于活动状态option。headlessTrue:fromseleniumimportwebdriverfromselenium。webdriver。chrome。serviceimportServicefromselenium。webdriver。common。byimportBywebdrivermanager:https:github。comSergeyPirogovwebdrivermanagerwillhelpusautomaticallydownloadthewebdriverbinariesthenwecanuseServicetomanagethewebdriversstate。fromwebdrivermanager。chromeimportChromeDriverManagerdefextractdata(row):namerow。findelement(By。TAGNAME,h3)。text。strip()。strip()capitalrow。findelement(By。CSSSELECTOR,span。countrycapital)。textpopulationrow。findelement(By。CSSSELECTOR,span。countrypopulation)。textarearow。findelement(By。CSSSELECTOR,span。countryarea)。textreturn{name:name,capital:capital,population:population,area(kmsq):area}optionswebdriver。ChromeOptions()options。headlessTruethisreturnsthepathwebdriverdownloadedchromepathChromeDriverManager()。install()definethechromeserviceandpassittothedriverinstancechromeserviceService(chromepath)driverwebdriver。Chrome(servicechromeservice,optionsoptions)urlhttps:www。scrapethissite。compagessimpledriver。get(url)getthedatapscountriesdriver。findelements(By。CSSSELECTOR,p。country)extractthedatadatalist(map(extractdata,countries))driver。quit()
  数据返回:〔{name:Andorra,capital:AndorralaVella,population:84000,area(kmsq):468。0},{name:UnitedArabEmirates,capital:AbuDhabi,population:4975593,area(kmsq):82880。0},{name:Afghanistan,capital:Kabul,population:29121286,area(kmsq):647500。0},{name:AntiguaandBarbuda,capital:St。Johns,population:86754,area(kmsq):443。0},{name:Anguilla,capital:TheValley,population:13254,area(kmsq):102。0},。。。〕性能测试
  在数据抓取量一样的前提下,我们当然需要知道到底谁的性能更好,是PlayWright,还是Selenium?
  这里我们使用Python3。10内置的time模块来统计爬虫脚本的执行速度。
  PlayWright:importtimefromplaywright。syncapiimportsyncplaywrightdefextractdata(entry):nameentry。locator(h3)。innertext()。strip()。strip()capitalentry。locator(span。countrycapital)。innertext()populationentry。locator(span。countrypopulation)。innertext()areaentry。locator(span。countryarea)。innertext()return{name:name,capital:capital,population:population,area(kmsq):area}starttime。time()withsyncplaywright()asp:launchthebrowserinstanceanddefineanewcontextbrowserp。chromium。launch()contextbrowser。newcontext()openanewtabandgotothewebsitepagecontext。newpage()page。goto(https:www。scrapethissite。compages)clicktothefirstpageandwaitwhilepageloadspage。locator(a〔hrefpagessimple〕)。click()page。waitforloadstate(load)getthecountriescountriespage。locator(p。country)ncountriescountries。count()data〔〕foriinrange(ncountries):entrycountries。nth(i)sampleextractdata(entry)data。append(sample)browser。close()endtime。time()print(fThewholescripttook:{endstart:。4f})
  Selenium:importtimefromseleniumimportwebdriverfromselenium。webdriver。chrome。serviceimportServicefromselenium。webdriver。common。byimportBywebdrivermanager:https:github。comSergeyPirogovwebdrivermanagerwillhelpusautomaticallydownloadthewebdriverbinariesthenwecanuseServicetomanagethewebdriversstate。fromwebdrivermanager。chromeimportChromeDriverManagerdefextractdata(row):namerow。findelement(By。TAGNAME,h3)。text。strip()。strip()capitalrow。findelement(By。CSSSELECTOR,span。countrycapital)。textpopulationrow。findelement(By。CSSSELECTOR,span。countrypopulation)。textarearow。findelement(By。CSSSELECTOR,span。countryarea)。textreturn{name:name,capital:capital,population:population,area(kmsq):area}startthetimerstarttime。time()optionswebdriver。ChromeOptions()options。headlessTruethisreturnsthepathwebdriverdownloadedchromepathChromeDriverManager()。install()definethechromeserviceandpassittothedriverinstancechromeserviceService(chromepath)driverwebdriver。Chrome(servicechromeservice,optionsoptions)urlhttps:www。scrapethissite。compagesdriver。get(url)getthefirstpageandclicktothelinkfirstpagedriver。findelement(By。CSSSELECTOR,h3。pagetitlea)firstpage。click()getthedatapandextractthedatausingbeautifulsoupcountriescontainerdriver。findelement(By。CSSSELECTOR,sectioncountriesp。container)countriesdriver。findelements(By。CSSSELECTOR,p。country)scrapethedatausingextractdatafunctiondatalist(map(extractdata,countries))endtime。time()print(fThewholescripttook:{endstart:。4f})driver。quit()
  测试结果:
  Y轴是执行时间,一望而知,Selenium比PlayWright差了大概五倍左右。红玫瑰还是白玫瑰?
  不得不承认,Playwright和Selenium都是出色的自动化无头浏览器工具,都可以完成爬虫任务。我们还不能断定那个更好一点,所以选择那个取决于你的网络抓取需求、你想要抓取的数据类型、浏览器支持和其他考虑因素:
  Playwright不支持真实设备,而Selenium可用于真实设备和远程服务器。
  Playwright具有内置的异步并发支持,而Selenium需要第三方工具。
  Playwright的性能比Selenium高。
  Selenium不支持详细报告和视频录制等功能,而Playwright具有内置支持。
  Selenium比Playwright支持更多的浏览器。
  Selenium支持更多的编程语言。结语
  如果您看完了本篇文章,那么到底谁是最好的无头浏览器工具,答案早已在心间,所谓强中强而立强,只有弱者才害怕竞争,相信PlayWright的出现会让Selenium变为更好的自己,再接再厉,再创辉煌。

内娱是真的凉透了吗?自娱自乐评榜单!真是离谱他妈给离谱开门内娱是真的凉透了这不,网友都开始自娱自乐自己评榜单了虽然热度不小,但关于这些个榜单的争议还挺大的,并不能使人完全信服。最最离谱的是这个华语歌手唱跳实力榜第一梯队是唱跳双神,里面有李(抄书打卡第122天)抄书,大成功和小快乐今天是我抄书第122天。人人都希望自己能够一下子获得一个大成功。但是,大成功很难得。于是,在每天的期待和每天的失望中,我们的日子一天又一天就这样过去了。同样的时光。本来我们可以每天回顾08年三聚氰胺案39万婴幼儿受害,三鹿奶粉田文华被判无期2008年,我们在遭遇汶川地震北京奥运会和冰灾之间,还有一件令全国轰动的事情发生,那就是三鹿奶粉被曝下毒,39万婴幼儿因此受害,三鹿董事长田文华因此入狱无期。国产奶粉先锋田文华192022。06。19早安心语,父亲节暖心语录句子父亲节最美图片大全早上好,今天是2022年06月19日,星期日,农历五月二十一,壬寅年虎年丙午月癸卯日!父亲节。父亲节离天空最近的地方,是儿时父亲的肩膀。父亲节离天空最近的地方,是儿时父亲的肩膀。2图片报罗卡每为利兹联出场25次拜仁获125万欧,封顶500万欧直播吧6月18日讯据图片报报道,若罗卡为利兹联在正式比赛出场100次,拜仁将收到全部总价500万欧元的浮动奖金。今天凌晨,利兹联官宣签下拜仁中场罗卡,根据此前消息,这笔交易的总价为海贼王路飞果实觉醒成为幻兽种太阳神尼卡形态网络调侃梗图艾斯表示那一拳白挡了,你是太阳神,你为什么不早说大熊黄猿你应该感谢我把草帽小子拍飞了,要不然到不了凯多哪里太阳神就觉醒了艾尼路我也尽力了,毕竟是太阳神嘛,那也是没办法的。斯摩格表示父亲节舷号之礼(旅)福建舰舷号为18其他舷号117的战舰根据新闻媒体报道,2022年6月17日上午我国第三艘航空母舰下水命名仪式在中国船舶集团有限公司江南造船厂举行。11时许,下水命名仪式开始,全场高唱中华人民共和国国歌,五星红旗冉冉升泽连斯基会被换掉吗?乌克兰的败局,似乎一开始就注定了。一个弱国和一个强国的战争,胜败没什么好猜的,只是多场时间的问题。开始的战事,还真有点一波三折。本来以为是速决战,可是打到基辅,就变成了持久战。有一即将来临的中日对抗,中国女排如何排兵布阵?世联赛菲律宾奎松站正在进行中,目前中国女排二胜一负,昨晚0比3被美国横扫,在技不如人的情况下,输球并不意外,毕竟连泰国都可以输,输世界第一的美国队当然可以接受。今晚将迎来奎松站的收女室友都20岁了,还穿着五六岁的衣服,是家境不好吗?兄弟你这是把房子建到河中间去了呢,不知道这平常出门都是靠船吗你这是抢东西吃的好办法,这样一下就没人能抢你的东西吃了这个小孩子太可爱了,就轻轻摸了他一下看他哭的,简直笑了哈哈狗子你这米体国米想组劳塔罗迪巴拉卢卡库三叉戟,将牺牲什克邓弗里斯直播吧6月19日讯意大利米兰体育报消息,国米希望能够组成劳塔罗迪巴拉卢卡库锋线三叉戟,他们将牺牲什克和邓弗里斯来获取引援资金。米体指出,国米将劳塔罗视作了非卖品,他们希望能够在今夏
台词硬挤,表演生硬?县委大院才播出两集,黄磊遭全网群嘲头条创作挑战赛县委大院这部剧是一部未播先火的剧,据说是国家广电总局电视剧司组织创作,主要是为了献礼党的二十大。大家如今对这种很正的剧也是期待万分,而且演员阵容也是非常强大,由胡歌领泽连斯基登上了时代周刊,而乌克兰成为了时代的眼泪当地时间12月7日,乌克兰总统泽连斯基因领导抗俄战争展现的乌克兰精神,被时代杂志评为年度人物,登上了杂志封面。而在12月5日泽连斯基被金融时报评为年度人物,在12月8日又被欧洲报纸日本背着美国,与两国合研六代机,性能全面超越F35日英意将联合研发下一代战机文肥佬茄子虽然有句老话叫三个臭皮匠,顶个诸葛亮,但最近日英意三个国家凑一块,打算联合研发六代机这就不一定会有什么好结果了。(日英意三国设想的六代战机)据观华为与oppo强强联手,专利互通好消息,好消息!!!图片源于网络近日,华为和oppo签订了全球专利交叉许可协议,两家公司都是中国妥妥科技大企业,手里分别掌握大量专利技术。2021民营企业专利排行榜。第1华为,第2泰州苏王错误补充胶原蛋白的方式你做过吗?吃猪蹄补胶原?脂肪先上身猪蹄的确含有丰富的胶原蛋白物质,但胶原的吸收率并不高,即使吸收了,也不知道还剩多少走到皮肤真皮层这一步。何况一个猪蹄的热量奇高,胶原补不成,让我们长胖倒是挺中安科技集团荣获贵州省绿色工厂称号近日,贵州省工业和信息化厅公布了2022年度贵州省绿色制造名单,中安科技集团获评省级绿色工厂。开展绿色工厂创建评选,旨在完善工厂绿色制造体系,助力工业领域实现碳中和碳达峰。绿色工厂探案甜剧云中谁寄锦书来定档,鬼马恋爱爆笑来袭由郭会中执导,谢彬彬吴佳怡傅菁张思帆主演的古装探案甜剧云中谁寄锦书来今日定档,该剧将于12月11日开播。云中谁寄锦书来讲述了太医世家嫡女沈鱼(吴佳怡饰)为翻冤案设局嫁入周府,不料新江西将办主题日活动,讲好生物多样性保护故事联合国生物多样性公约第十五次缔约方大会(COP15)第二阶段会议于2022年12月7日19日在公约秘书处所在地加拿大蒙特利尔市举行。记者从江西省生态环境厅获悉,经江西省政府批准,由无胶不毒?白乳胶可以放心使用吗?一篇文章解答疑惑胶水作为常用的家装辅材,这两年老爸还真是评测了不少,如糯米胶玻璃胶发泡胶界面剂这些五花八门的胶通途使用场景各有不同,不仅令家长们在家装过程中往往胶胶分不清楚,有些注重环保性的家长更商业故事丨爆火出圈的ChatGPT,和它背后的万亿商业化狂想21世纪经济报道记者董静怡上海报道人工智能技术奇点越来越近了。近日,聊天机器人模型ChatGPT风靡全网。凭借背后强大的技术,ChatGPT可以完成流畅对答写剧本写代码等各项功能,伤胃水果被揪出,4种水果可能会加重胃病,再喜欢也建议少碰水果富含丰富的维生素矿物质和膳食纤维素,在饮食中扮演着重要的营养角色。俗话说水果吃对,年轻10岁!。在大众眼里,吃水果能强身健脑排毒瘦身抗衰养颜等等,养生作用数不胜数。但吃水果也有
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网