幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

pythonselenium实现gitlab全文搜索

  一般来说软件开发相关企业都会有自己内部的源代码管理工具,比如私有部署的gitlab服务器。特别是企业上规模之后会有多个产品线,各个业务产品线各自的项目解决方案会非常多。
  以我们公司为例,就招聘事业部来说,内部的大大小小的中台ESB、MRest、各种Consumer消费端、各种工具等等解决方案现在已经上百个了。这个时候你就会遇到如下一些场景:
  1。需要修改某个公共接口的参数或者某个基础库项目包中的公共方法,但是不知道到底哪些项目、哪些地方引用了该接口,不好评估影响点?
  2。业务代码中已知道某个KafkaTopic,但是当初写代码兄弟没备注消费端的项目,找了很久就是找不到Consumer项目在哪儿?
  3。我想通过某一些特定的关键词搜索某一段代码,记不清到底在哪些项目中使用了?
  如果你有上述的困惑,那么下面介绍的这个gitlab全局Search代码搜索工具能够帮你解决这些问题。工具的实现采用pythonseleniumchromedriver实现自动化登录内部gitlab站点,通过勾选默认配置的产品分组,实现对多个分组内的项目代码特定多个关键词查询搜索。工具的运行流程及界面大概如下面几幅截图所示:
  step1。读取配置文件信息自动登录:{username:yourname,password:yourpassword,projectGroups:〔recrxxx,platformuiframework,platforminfrastructure,uxshareplatform〕}
  step2:登陆成功后主页注入搜索填充信息,可选择的搜索项目分组、关键词录入框等
  step3:开始遍历项目分组,获取项目id,并执行关键词搜索
  step4:获取命中结果展示,小于等于10个结果的会默认打开浏览器tab页全部展开,大于10个结果的需要手动打开单个或全部
  step5:因为使用的chromedriver来驱动实现的,需要注意chrome浏览器版本与chromedriver版本的匹配,如不匹配会记录如下日志;
  主要利用python驱动selenium实现自动化控制gitlab项目页面,通过注入特定html标签代码,实现自动化搜索gitlab项目代码。下面是python脚本部分主要实现:classGitLabSearchTool(object):definit(self):self。usernameself。passwordself。projectGroups〔〕self。usedKeywords〔〕self。getConfigInfo()self。maxPageIndex50self。pIdspiderContainerself。searchDivIdsearchContainerself。baseurlhttp:gitlab。xxxcorp。comself。baseLoginUrlhttp:gitlab。xxxcorp。comuserssigninself。startTimedatetime。now()self。isSearchingFalseself。stopSearchFalseself。isCloseFalseself。successUrlsdict()self。searchGroup〔〕self。keywords〔〕self。requestNoneself。driverNonedefstart(self):useragentMozilla5。0(WindowsNT10。0;WOW64)AppleWebKit537。36(KHTML,likeGecko)Chrome86。0。4240。111Safari537。36chromeoptionsOptions()chromeoptions。addargument(useragent{}。format(useragent))chromeoptions。addargument(disableplugins)禁用插件chromeoptions。addargument(startmaximized)启动GoogleChrome就最大化chromeoptions。addexperimentaloption(excludeSwitches,〔enableautomation〕)隐藏Chrome正在受到自动软件的控制pathItem〔chromedriver。exe〕driverPathPath。cwd()。joinpath(pathItem)self。driverwebdriver。Chrome(driverPath,optionschromeoptions)self。driver。get(self。baseLoginUrl)ifself。usernameandself。password:WebDriverWait(self。driver,1000)。until(EC。presenceofelementlocated((By。XPATH,〔idnewldapuser〕)))time。sleep(0。3)self。driver。findelement(By。XPATH,〔idusername〕)。sendkeys(self。username)time。sleep(0。3)self。driver。findelement(By。XPATH,〔idpassword〕)。sendkeys(self。password)time。sleep(0。3)self。driver。findelement(By。XPATH,〔idrememberme〕)。click()self。driver。findelement(By。XPATH,〔idnewldapuser〕input〔3〕)。click()threading。Thread(targetself。checkBrowserIsClose)。start()self。requestrequests。session()try:whilenotself。isClose:try:homepself。driver。findelement(By。ID,xxxyoucangohomenow)ifhomepisnotNone:self。driver。get(self。baseurl)except:passtry:searchDivself。driver。findelement(By。ID,xxxyoucanstartsearchnow)ifsearchDivisNone:time。sleep(1)else:self。startTimedatetime。now()self。successUrls。clear()self。searchGroup。clear()self。keywords。clear()chkListself。driver。findelements(By。XPATH,〔idsearchGroup〕descendant::input〔typecheckbox〕)forchkinchkList:ifchk。getattribute(checked)true:self。searchGroup。append(chk。getattribute(attrvalue)。strip())iflen(self。searchGroup)0:returnkeywordInputself。driver。findelement(By。ID,searchKeyword)searchKeywordkeywordInput。getattribute(value)。strip()keywordsre。split(,,,searchKeyword)iflen(keywords)0:forkwinkeywords:kwkw。strip()iflen(kw)0:self。keywords。append(kw)iflen(self。keywords)0:self。driver。executescript(arguments〔0〕。focus();,keywordInput)returnself。search()except:time。sleep(1)print(webdriverisclose)returnexceptExceptionasex:print(异常:{}。format(ex))returndefsearch(self):self。isSearchingTrueself。stopSearchFalseforgroupinself。searchGroup:ifself。stopSearch:breakforpageinrange(1,self。maxPageIndex):ifself。stopSearch:breakurlhttp:gitlab。xxxcorp。com{}?page{}。format(group,page)self。driver。get(url)WebDriverWait(self。driver,5)。until(EC。presenceofelementlocated((By。XPATH,〔idcontentbody〕p〔2〕p〔1〕ulli〔1〕a)))projectsself。driver。findelements(By。XPATH,〔idprojects〕puldescendant::a〔classproject〕)iflen(projects)0:breakforprojinprojects:try:stopSearchself。driver。findelement(By。ID,xxxyoucanstopsearchnow)ifstopSearchisnotNone:self。stopSearchTruebreakexcept:passprojUrlproj。getattribute(href)self。searchProject(projUrl)endTimedatetime。now()delta(endTimeself。startTime)。secondssuccessCountlen(self。successUrls)searchKeyword,。join(self。keywords)ifsuccessCount0:searchedPojectUrlself。getSearchedProject()htmlspan查询{}span
  span耗时:{}秒!命中{}个项目spanbuttonstylewidth:150px;marginleft:50px;color:red;fontsize:16px;fontweight:normal;typebuttononclickgotohome()跳转搜索主页buttonbuttonstylewidth:150px;color:black;fontsize:16px;fontweight:normal;typebuttononclickopenAllUrl()打开全部链接button
  {}。format(searchKeyword,delta,successCount,searchedPojectUrl)else:htmlspan查询{}span
  span耗时:{}秒!命中{}个项目spanbuttontypebuttonstylewidth:150px;marginleft:50px;color:red;fontsize:16px;fontweight:normal;onclickgotohome()跳转搜索主页button
  。format(searchKeyword,delta,successCount)self。createDom(html)self。isSearchingFalseiflen(self。successUrls)10:forurl,nameinself。successUrls。items():self。driver。executescript(window。open({})。format(url))defsearchProject(self,projUrl):projself。getProjectId(projUrl)ifproj〔0〕0:returnforkeywordinself。keywords:ifnot(keywordandlen(keyword。strip())0):continuesearchUrl{}search?utf8snippetsscopesearch{}projectid{}。format(self。baseurl,keyword,proj〔0〕)dataself。request。get(searchUrl)。texthtmletree。HTML(data)topResultshtml。xpath(〔idcontentbody〕p〔contains(class,prependtop10)〕)iflen(topResults)0:self。successUrls〔searchUrl〕proj〔1〕jswindow。open({})。format(searchUrl)self。driver。executescript(js)self。driver。switchto。window(self。driver。windowhandles〔0〕)successCountlen(self。successUrls)ifsuccessCount0:searchedPojectUrlself。getSearchedProject()htmlbuttonstylewidth:150px;color:red;fontsize:16px;fontweight:normal;typebuttononclickstopSearch()停止搜索button
  span正在查询{}span
  span{}span
  span查询命中{}个项目span
  {}。format(keyword,projUrl,successCount,searchedPojectUrl)else:htmlbuttonstylewidth:150px;color:red;fontsize:16px;fontweight:normal;typebuttononclickstopSearch()停止搜索button
  span正在查询{}span
  span{}span。format(keyword,projUrl)self。createDom(html)defgetProjectId(self,url):projid0projnamedataself。request。get(url)。texthtmletree。HTML(data)valueshtml。xpath(〔idsearchprojectid〕value)iflen(values)0:projidint(values〔0〕)nameshtml。xpath(〔idsearchprojectid〕dataname)iflen(names)0:projnamenames〔0〕return(projid,projname)。。。。。

一份加班表悄悄疯传,真正加班最重的群体却无处倾诉文化纵横孙中伟华南师范大学黄婧玮华东理工大学【导读】近日,一份以各大互联网公司为主的公司作息表在网上流传。发起者称,希望通过这一活动,促进社会重视加班问题,推进工作机制的真正变革……刘诗雯别墅选房闹乌龙?王楠郭斌社交媒体回应随着陕西全运会圆满落幕,中国乒超联赛正在如火如荼的进行当中,然而却突然传出了一个莫名其妙的绯闻,关于刘诗雯选房事件的争议。众所周知,王楠夫妇在东京奥运会之前就宣布将奖励国……太心酸!捐款几千万的中国公司,却比不上苹果CEO一句将捐款7月一场暴雨,一小时内就给郑州市区灌进了107个西湖的水量,十月大雨降临太原,五天时间流进了98个西湖的水量,当大家在网上看到山西灾情的时候,融入国人骨子里面那股侠义之气又散发……朝战爆发后,毛泽东急令周恩来组建东北边防军!事后发现真高明扫帚不倒,灰尘照例不会自己跑掉的!坐在中南海菊香书屋院子里的毛泽东慢慢地碾碎手中的香烟,站起身来,用一种常人难以理解的凌厉眼神扫视着身边的工作人员。八天后,一个关系世界命……蓝宝石RX6600显卡降至1699元,跑分超RTX3060IT之家3月10日消息,蓝宝石今日宣布RX6600白金显卡降价优惠,到手价1699元。参数方面,蓝宝石RX6600白金显卡采用AMDRDNA2架构,7nm制造工艺,有17……央视公开发声!女足核心王霜迎来好消息,退役后不用愁了中国女足被称为铿锵玫瑰。在历史上,中国女足获得过奥运会和世界杯的亚军,中国女足也出现过非常多优秀的运动员。目前,中国女足的头号球星毫无疑问就是王霜。王霜作为中国女足的核心,代表……先进技术赋能数字教育网龙多点布局全线开花3月7日,在福州数字教育小镇101艺术潮玩中心举办的春山可望兔年可期2023网龙媒体恳谈会上,AI数字人唐钰用一张张亮眼的成绩单,勾勒出网龙以先进技术赋能数字教育的前行轨迹20……春节抢到票了吗?别慌!这些银行卡支付返红包投教12121世纪经济报道记者李愿综合报道投资走正道,安全有保障,欢迎来到《投教121》。春节将至,《投教121》特推出春节系列,给大家讲讲春节期间省钱方法、理财技巧,助大家财富兔……用于工程应用的粘性土壤什么是黏性土?黏性土指含黏土粒较多,具有粒间连结的细粒土。具有黏性和可塑性,孔隙小而多,透水性弱,力学性质随含水量大小而变化等特点。土壤内聚力是土木工程和岩土工程的……2023武汉马拉松媒体报名通道开放在武汉马拉松的赛场上,有一群人用敏锐的眼睛,洞察汉马;用心灵的触角,感悟汉马;用纪实的镜头,记录汉马;用独特的视角,诠释汉马。他们就是奋战于赛道一线、直击现场的记者朋友们……我只在乎你邓丽君经典老歌为什么感觉老歌比新歌好听,更加有含义如果没有遇见你我将会是在哪里日子过得怎么样人生是否要珍惜也许认识某一人过着平凡的日子不知道会不会……IPO暂停后分红超400亿元净利骤降,蚂蚁集团2022年发生自2020年11月蚂蚁集团IPO被按下暂停键后,这家巨头企业的一举一动都备受资本市场的关注。近日,随着阿里巴巴发布2022年第四季度业绩报告,蚂蚁集团的业绩也引起了人们关注。……
一年就等这一锅!河套人冬天餐桌上的顶流小雪卧羊大雪宰猪杀猪是河套地区在过年之前重要的一个篇章随着杀年猪的开始热火朝天的忙碌气氛打破了冬日的萧索与寂寥胖乎乎的年猪……凯特身穿460英镑礼服,无视梅根1亿英镑打造的纪录片英国王室,在哈利和梅根给王室投下的重磅一拳之后,发布了一张,凯特身穿耀眼的红色,极地礼服长裙的照片,据悉礼服价值仅460英镑。照片以圣诞树和一些盒装礼物为背景。这件礼物凯……小孩抓周的习俗,你知道多少,给自己孩子测试下我国民间在给婴儿庆周岁生日时,常有抓周仪式。抓周,又称试儿、试周。抓周仪俗,各地基本相同,当日,父母为其沐浴后,穿上外婆家送来的新衣服鞋袜,抱到厅堂八仙桌上去抓周。桌上摆着书、……明星也有撞衫的时候,穿搭出的不同效果,都是风格惹的祸明星撞衫谁输了明星,这是一个大家都羡慕的群体,他们颜值高、身材好,觉得他们穿什么都好看,毕竟颜值在那放着。可是,明星真的穿什么都好看吗?那倒未必,特别是两个明星撞衫的时候……2015年地球遭受过宇宙引力波撞击,与如今全球灾难频发有关系这个东西叫黑洞,没错,人类已经在2019年观测到了黑洞,但我想告诉你的是,黑洞不是个摆设,它的背后是一种以宇宙BUG方式呈现的引力。而在13亿年前,这两个绕轨道运行的巨大……春季动不动就上火是咋回事?上火了如何正确降火?进入春季,天气逐渐回暖,有很多人开始出现不同程度的上火症状:口鼻干燥、口苦咽干、牙龈肿痛、尿黄、便秘、皮肤干燥、急躁易怒到底什么是上火?为啥老百姓都会把这些症状统统叫做上火?出……养生的极致是回归身心平衡立春一到,万物生发。蛰伏的冬虫睡眼惺忪,等待着一场滋润大地的春雨,钻出泥土;寂寞了一个冬天的山头,准备邂逅温暖的春风,迎接芳草生芽;人们将退去繁重的衣着,回归自然的……贾巴尔爱徒,22岁,身高2米18!在NBA打了79场比赛,表2019年,前NBA名宿贾巴尔,曾公开表示,自己非常看好UCLA新生摩西布朗。他在接受采访时表示,认为后者天赋异禀,将会拥有一个很光明的未来。另外一位传奇中锋比尔沃……大胆地把自己豁出去文小为图片网络做啥事,都拿着捏着,小心翼翼的,怕用坏了自己,还是怕吓着了别人?人来世上,也就一遭,何不来个淋漓尽致,痛痛快快,大快朵颐的感觉才爽。我们只是宇宙……还记得征服里的那个韩跃平吗?现如今长成这样白红标这个名字可能很多人都会觉得十分陌生,不过如果说起经典电视剧《征服》中韩跃平这个角色,大家可能会迅速在脑海中想起这个角色。韩跃平这个角色的表演者就是白红标。白红标19……我们在内蒙古安的相机,甚至刷新了IUCN的分布地图有件事可能大家都已经知道了。不知道也没关系,重要的事情应该多说几次:我们在雅布赖山拍到了猞猁!就是它,虽然很瘦,但大长腿很好认对,你没看错,是大长腿猞猁,是沙……春日漫游计划我和春天有个约会春天是万物复苏的季节,也是各种花卉开满的季节。这样的风和日丽,美景如诗,戴上装备,一起来一场春日的漫游吧!乡间小路虽然骑行有些坎坷,但美景却是城市之中鲜有的,绿树红花,阳……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网