又是一年招聘旺季,相信不少小伙伴已经在海投简历过程中,手指酸软心力交瘁了,本文带大家从零开始编写一个自动化脚本完成简历投递,解放双手吧~

1、搭建环境启动浏览器:

1、安装java,安装自己习惯的IDE,例如IDEA或eclipse等等。

2、创建一个maven的项目:

在pom文件中添加如下selenium依赖java库,用于构建脚本客户端。

<dependencies><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency>
</dependencies>

3、下载自己浏览器配套版本的webdriver应用。

注意检查自己的浏览器版本,下载对应版本的driver。推荐使用chrome浏览器进行自动化测试哦~

https://registry.npmmirror.com/binary.html?path=chromedriver/

4、通过在脚本中调用webdriver来启动浏览器以完成后续的自动化操作。

//指定chromedriver所在位置。
System.setProperty("webdriver.chrome.driver","E:\\AutoTools\\chromedriver\\98\\chromedriver.exe");
//实例化操作,打开浏览器。
WebDriver chrome=new ChromeDriver();
//设置一下浏览器的位置和大小
chrome.manage().window().setPosition(new Point(300,30));
chrome.manage().window().setSize(new Dimension(1600,900));
//1、访问拉勾
chrome.get("https://www.lagou.com/");

接下来需要对网页上的元素来进行定位,从而完成各个元素的操作流程。

2、web自动化最核心的操作:元素定位

元素定位:其实就是在html文档中尽可能清楚地描述出来一个或一组元素的特征,能够确定找到元素进行操作。

使用chrome开发者工具查看html元素并定位的小技巧:

按下F12或者页面上右键检查,就可以打开开发者工具,查看网页的html文档。

用ctrl+f的搜索栏可以验证表达式的正确性和搜索到的元素结果。

html元素的构成: 一个网页由各种元素构成一个html文档,实际上html本身也是一个元素。

元素由开始标签、内容和结束标签三部分组成,而开始标签中包含以属性="属性值"格式呈现的属性。

元素开始标签(tag)   属性="属性值"   元素内容   元素结束标签
<button type="button" id="cboxClose">close</button>

定位元素的本质就是让计算机根据元素的特征能够找到这个元素,就像找人的时候描述清楚对方的特征,因为完成元素定位根据自己的需求,将元素的特征描述清楚即可。

而基于html文档格式,定位时能使用用的特征只有四种: 元素名 、属性、元素文本内容、元素层级关系。

2.1、selenium 8大定位方法

对应的,在selenium中,提供了findelement和findelements方法用于完成元素定位,并且可以使用8种定位方式进行元素特征的描述,分别是:

id: 通过元素的id属性的值定位, 相当于提供人的身份证号。
name: 元素的name属性值, 相当于人的名字。
id和name 都是属性,值是由开发取的,通常开发会保证id不重复,由于简单,id也是比较常用的定位方法

classname: class属性的值。 相当于人的穿衣风格。
tagname: 元素名。相当于人的类型
这两个定位方法基本上很难唯一确定一个元素。

但是实际上:id name classname 和 tagname在selenium中都是基于css selector方法来完成定位的。

linktext: 超链接的文本内容 相当于人给自己安的名头。
partiallinktext: 超链接的文本的部分内容 相当于名头中的部分词汇。
这两个定位方法要求元素一定是a元素,即超链接元素的文本。

xpath:xml 路径语言。
css selector: css选择器
html中是按照元素层级来排列的,所以一定会有唯一的层级表示能够唯一找到元素。

xpath和css Selector是可以使用层级表示的定位方法,因此这两个方法一定能定位到元素,掌握其中一种即可从容应对元素定位。

2.2 xpath和css 选择器语法

描述元素层级的语法如下:

xpath:xml 路径语言。 基本语法为://元素名[限制条件]/元素名[限制条件]
限制条件的表达式可以是属性条件表达式或序号。

xpath开头使用/表示从根层级html开始,固定写法是/html/body/…………

//开头表示在文档任意层级开始。

例如:

//*[@id=“jobsContainer”]/div[2]/div[1]/div[1]/div[1]/div[1]/div/div[2]/div[12]

css selector: css选择器。基本语法为:元素名[限制条件]>元素名[限制条件]
例如:

#jobsContainer > div.mine-container__1oUnf > div.filter-box__TWLOX > div:nth-child(1) > div.multi-chosen__1bxJo > div.city-warp__39DWO > div > div.hot-city__1Sprg > div:nth-child(12)

描述元素限制条件的基本语法:
元素名可以用表示任意类型。在css选择器中用表示任意类型时,可以省略*号。

xpath:

元素名[@属性=‘属性值’] :描述一个具有特定属性值的元素

元素名[text()=‘文本内容’]:描述一个具有特定文本内容的元素

元素名[数字N]:描述一个是其父元素第N个孩子的元素。

css:

元素名[属性=‘属性值’] :描述一个具有特定属性值的元素。

css选择器有些常用的特殊简便表达,例如:

#idV :等价于 *[id=‘idv’]

.classV: 等价于 [class=‘classV’]

最常用的定位表达式:

//元素名[text()=‘文本内容’] 例如://div[text()=‘长沙’]

在保证元素定位准确的同时能够大大提高定位表达式的可读性,便于维护自动化测试脚本。

3、定位元素完成筛选职位流程
掌握了定位元素的方法之后,将需要实现的简历投递流程通过selenium代码实现

//2、关闭弹窗
WebElement cboxClos = chrome.findElement(By.id("cboxClose"));
cboxClos.click();
//等待浏览器响应,让代码暂停1秒钟
Thread.sleep(2000);
//3、搜索软件测试
chrome.findElement(By.cssSelector("input[placeholder=\"搜索职位、公司或地点\"]")).sendKeys("软件测试");
chrome.findElement(By.cssSelector("#search_button")).click();
//4、设置选项
chrome.findElement(By.xpath("//div[text()='长沙']")).click();//将鼠标悬停到薪资要求
WebElement salary = chrome.findElement(By.xpath("//span[text()='薪资要求']"));
//悬停实现
//通过selenium提供的动作链来实现自动化测试。
Actions act=new Actions(chrome);
act.moveToElement(salary).perform();//悬停之后点击 10k-15k
chrome.findElement(By.xpath("//*[text()='10k-15k' and not(@class)]")).click();
//等待浏览器
Thread.sleep(1000);//将鼠标悬停到学历要求
WebElement xueli = chrome.findElement(By.xpath("//span[text()='学历要求']"));
act.moveToElement(xueli).perform();//悬停之后点击 本科
chrome.findElement(By.xpath("//*[text()='本科' and not(@class)]")).click();

4、实现批量点击职位并进行投递

在进行职位选择时,会打开新窗口展示职位,因此过程中需要进行窗口的切换。

最终通过循环操作,完成各个职位的点击与投递操作。

//在打开新窗口之前,获取一下句柄(浏览器窗口的编号)
String homepage = chrome.getWindowHandle();
System.out.println("首页的句柄是" + homepage);//定位所有的职位信息元素列表,获取职位个数
List<WebElement> joblist = chrome.findElements(By.xpath("//div[@class='item__10RTO']"));
int jobcount=joblist.size();//通过循环,按职位数重复投简历的动作
for (int i = 1; i <= jobcount; i++) {//findelement如果能找到多个元素,默认用第一个。会打开一个新窗口。chrome.findElement(By.xpath("//div[@id='jobList']//div[@class='item__10RTO'][" + i + "]//a")).click();//切换到新窗口//获取到所有的窗口的句柄Set<String> windowHandles = chrome.getWindowHandles();System.out.println("打开新窗口之后所有的句柄是:" + windowHandles);//遍历两个句柄,判断是不是homepage,不是homepage就切换过去。for (String windowHandle : windowHandles) {if (!windowHandle.equals(homepage)) {//切换窗口到指定句柄。chrome.switchTo().window(windowHandle);//退出循环break;}}//判断是否有自己感兴趣的selenium关键字//if (chrome.getPageSource().contains("selenium")) {//6、投递简历chrome.findElement(By.xpath("//a[text()='投简历']")).click();Thread.sleep(10000);}//关闭新窗口,回到首页chrome.close();chrome.switchTo().window(homepage);}

房子要一层一层盖,知识要一点一点学。大家在学习过程中要好基础,多上手实操,话不多说,这里狠狠上一次干货!我熬夜整理好的各阶段(功能、接口、自动化、性能、测开)技能学习资料+实操讲解,非常适合私下里学习,比找资料自学高效多了,分享给你们。

领取关 w/x/g/z/h:软件测试小dao

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

还在辛苦一个个投简历?试试用web自动化海投相关推荐

  1. 投简历用什么邮箱最好?投简历怎么发邮件?

    作为一名上市公司HR主管,最近收到很多朋友留言,问我投简历用什么邮箱好,投简历怎么发邮件.本文为个人多年总结的一些建议,有助于大家提高面试机会,早日进入自己理想的公司! 在招聘旺季,每次打开邮箱都有几 ...

  2. 一直找不到软件测试工作?你简历投对了吗?拿了12个offer,才明白投简历的真谛!

    每次逛测试群,或者逛贴吧,总会看到一些关于投递简历找工作的消极声音: 找测试工作好难,投了好多简历,都没有HR给我回复... 感觉xx这个城市的招聘都被我投完了,极少的面试,投出去都石沉大海了... ...

  3. 找不到工作?!请确认你投简历的姿势对了么?

    感觉每次逛测试群,或者逛贴吧,总会看到一些关于投递简历找工作的消极声音: 找测试工作好难,投了好多简历,都没有HR给我回复... 感觉xx这个城市的招聘都被我投完了,极少的面试,投出去都石沉大海了.. ...

  4. [YTU]_2532(投简历)

    题目描述 小华历经12寒窗苦读,又经历4年大学磨砺,终于毕业了,随着毕业季的到来,找工作也日益紧张起来.由于要面试不同的公司,因此小华需要准备不同的简历.当然最基本的信息是必不可少的,基本信息:姓名. ...

  5. YTU.2532: 投简历

    2532: 投简历 Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 1126   Solved: 802 [ Submit][ Status][ We ...

  6. 如何获取招聘源?在投简历前获取更多招聘信息...

    前言 又快到了一年一度的春招和毕业季.身边还有许多准备从事IT行业的朋友没有找到工作,基兄特此整理了一份关于自己找工作的经验(也参考了网上的部分数据和内容). 本文的内容主要为在投递简历时招聘源的招聘 ...

  7. 2022年,计算机保研er需要海投吗?

    写在前面 近几年,受疫情影响很多学校的夏令营改为线上举办,与线下夏令营相比,线上夏令营开展时间短并且地理位置不受限,这让保研er投递多所院校甚至多线程参加夏令营成为了可能.另外,在保研内卷十分严重的今 ...

  8. 弘辽科技:玩转海投流量快速起爆

    大家都知道运营好一家京东店的核心三指标是展现.点击.转化三者缺一不可,又层层递进的,那么具体都需要操作哪些呢? 提到展现,就又不得不提到海投,但是很多商家对海投还是不怎么了解的,所以今天想要为大家介绍 ...

  9. 【神回复】程序员30多岁还在投简历找工作,怎么看?

    今天有一个社区网友,微信给我留言,程序员30多岁还在投简历找工作,亚历山大,怎么看? 我怎么看?其实这个问题还真没有想过,因为目前还有遇见朋友所说的问题,但是我也有话要说. 程序员在三十岁的时候,投简 ...

最新文章

  1. 屠龙之路_坚持就是胜利_NinthDay
  2. (一)初识java ---我的第一个java程序
  3. [XSY3383]多线程(笛卡尔树,DP)
  4. Chrome英文版离线安装包下载
  5. Springboot 2.0选择HikariCP作为默认数据库连接池的五大理由
  6. jenkins 手动执行_想知道如何用Jenkins自动执行Python脚本输出测试报告?
  7. mysql一共有多少引擎_MySQL存储引擎你们知道多少?
  8. OpenStack pike版 安装openstack服务(4) 续安装openstack服务(3)
  9. php 禁止浏览器直接访问网页_PHP禁止直接从浏览器输入地址访问PHP文件
  10. 欧阳娜娜从阿里跳槽网易:阿里P8堪称教科书级别的面试现场!最后一个问题亮了...
  11. Mac安装MongoDB
  12. 【用Java模拟KTV点歌系统】
  13. 物联网应用层的关键技术有哪些
  14. Django | ORM choices参数详解
  15. 软件开发过程与项目管理
  16. NYOJ 33 蛇形填数
  17. PCB射频电路四大基础特性
  18. exceljs 导入导出 excel 文件
  19. PayPal提现被退回的解决办法?(教程和费用)
  20. 小型SDDC建设攻略

热门文章

  1. java 树的各种遍历
  2. Android 获取设备的分辨率及屏幕密度、sw
  3. pam php水解加碱,PAM酸性水解反应聚丙烯酰胺
  4. Google Earth Engine(GEE)——使用GEE平台实现全球森林生物量的估算(MODIS数据为例)
  5. 80后相亲面面观 男生找富婆不怕倒插门。80后的特点!你占几样?
  6. 郑州各类软件开发公司各类软件开发
  7. PSD模版如何变成网页模版
  8. 「读书感悟」一种世界观,一以贯之
  9. 卡瓦格博[梅里雪山]之日照金山美景全纪录
  10. 如何将springboot 服务整合到spring cloud?