自己动手打造工具系列之自动刷新简历

0×00 背景

话说搞安全的大佬们都非常忙,自己在一步一步成长中无暇顾及其他琐碎的事情,比如让猎头注意到各位大佬。如何让猎头和大厂注意到自己呢?第一、提高自己在整个行业的曝光度;第二、定时刷新自己的简历;还有第三,第四等等,各位发挥脑洞。针对第一点,很多大佬各有自己的办法,但是针对第二点其实我们有全自动化的解决方案,可以为自己相对地节约点时间。小弟今天就带来自己动手打造工具系列之自动刷新简历。本文主要是针对喜欢写工具的童鞋提供一些思路,并一步一步地分析思路和方法,起一个抛砖引玉的作用吧。

0×01 方法及步骤

原理

本工具主要是使用selenium来操作浏览器,实现元素定位、按钮点击和url请求,然后通过点击成功后页面信息的变化判断和截图判断的方式来确定是否成功刷新简历。另外本文只操作了猎聘网和智联招聘网站,因为自己用到这两个网站比较多,很多好机会都是从这两个网站获得的。其他招聘网站还请各位自行研究。比如如何识别验证码等。

开发环境

开发语言:Python 3.6.5 (也存在Java版的)

所用模块:

selenium 3.11.0 (自动化测试模块)

argparse

sys

time.sleep

系统环境:MacOS Sierra

IDE: Pycharm

0×02 步骤解析

开始之前,需要下载相关的组件。主要包括各类浏览器的驱动(Webdriver),这样我们才可以操作浏览器来完成自动刷新简历的工作。以下是主流浏览器的驱动下载地址:

Firefox: https://github.com/mozilla/geckodriver/releases/  (本文主要以操作Firefox为主来讲解)

其他WebDriver下载地址:https://www.seleniumhq.org/download/

如果使用macOS, 直接使用brew install geckodriver 即可。

步骤一、创建Python虚拟环境

如果使用的是Pycharm的话,在选择建立项目的时候可以选择创建虚拟环境。同时,也可以自己建立虚拟环境。选择其一即可。建立虚拟环境的方法请参考官方文档。虚拟环境搭建好以后使用如下命令安装模块:

pip install selenium

等待安装完成后,即可开始工具编写之旅。

步骤二、导入模块

本文主要使用以下模块的方法:

from selenium.webdriver import Firefoxfrom selenium.webdriver.firefox.options import Optionsfrom selenium.webdriver.common.keys import Keysimport argparseimport sysfrom time import sleep

Options主要是来已无GUI方式启动浏览器,避免突然跳个浏览器出来吓自己一跳。

步骤三、代码编写

首先定义一个类,所谓面向对象编程嘛。现在很火,耳熟能详 ~ ~其次初始化参数和一些变量。代码如下:

class AutoJobHunter:    def __init__(self, username, password):        # 登陆网站所需要的用户名和密码        self.username = username        self.password = password        # 需要自动刷新简历的网站        self.zp_url = ‘https://www.zhaopin.com‘        self.lp_url = ‘https://m.liepin.com/login/?url=https://m.liepin.com/cq/‘

代码初始化了用户名和密码,而且定义了需要进行自动刷新简历的网站。后面的方法中会用到这些参数和变量。有盆友会问,为什么是m.liepin.com而不是www.leipin.com呢?后面会一一解释。

然后我们需要操作两个网站的简历自动刷新,那我们来定义两个方法吧,我真的想称之为函数。C/C++中毒太深!两个方法我取了个拼音,好low有没有!zhaopin() and liepin()。这个两个方法的内容大同小异,因为每个网站的结构不一样,所以造成了需要设定两个方法。以zhaopin()这个方法来讲解。

def zhaopin(self):    try:        #实例化Options,为启动无GUI界面做准备        options = Options()        #添加无GUI模式启动浏览器选项        options.add_argument(‘-headless‘)        #实例化对象        driver = Firefox(firefox_options=options)        #使用webdriver请求url        driver.get(self.zp_url)        #定位元素,输入用户名和密码,然后进行提交操作        driver.find_element_by_name(‘loginname‘).send_keys(self.username)        driver.find_element_by_name(‘Password‘).send_keys(self.password)        driver.find_element_by_tag_name(‘button‘).submit()        sleep(3)        #定位元素,点击"刷新简历"        driver.find_element_by_css_selector("a.zp-pfme-funcs-link:nth-child(2) > div:nth-child(3)").click()        #获取页面变化部分,因为该位置会变化成"刷新成功"        t = driver.find_element_by_css_selector("a.zp-pfme-funcs-link:nth-child(2) > p:nth-child(2)").text        if "刷新成功" in t:          print("智联招聘简历刷新成功!\n")        driver.close()     except Exception as e:        print("出现异常,程序将退出!\n")        print("具体错误信息如下:\n", e)        sys.exit(1)

因为我们需要无GUI模式启动浏览器,所以Options必不可少,在其中加入‘headless’ 参数后便可以悄无声音地刷新简历,这样老板就不会看到我们在看其他机会啦。哈哈。在注释里已经说得相对明白了。其实主要在于如何去定位元素,然后操作元素。Selenium提供了8种定位元素的方法,大家有兴趣可以去官网看看。我们用得最多的还是.find_element_by_name、.find_element_by_tag_name 和 .find_element_by_class_selector。当然其他定位元素的方法只要能实现的都没问题,看自己喜好。

我们使用浏览器打开zhaopin.com, 按下F12打开开发者工具, 随后点击最左边的“选取一个元素按钮”,然后移动到用户名和密码输入框处便可以获取name,Class等信息。如图所示:

最后使用.find_element_by_name 和 .find_element_by_tag来定位操作元素,因为该页面只有一个button标签,所以就使用tag name即可定位:

#定位元素,输入用户名和密码,然后进行提交操作driver.find_element_by_name(‘loginname‘).send_keys(self.username)driver.find_element_by_name(‘Password‘).send_keys(self.password)driver.find_element_by_tag_name(‘button‘).submit()

其中sleep(3),主要是点击后页面可能还未加载。所以等待页面加载完后再进行其他操作。然后我们进入登陆后的页面去查找我们想要得到的自动刷新简历的功能。找到元素,右键“复制”->”CSS选择器”即可复制位置。

#定位元素,点击"刷新简历"driver.find_element_by_css_selector("a.zp-pfme-funcs-link:nth-child(2) > div:nth-child(3)").click()#获取页面变化部分,因为该位置会变化成"刷新成功"t = driver.find_element_by_css_selector("a.zp-pfme-funcs-link:nth-child(2) > p:nth-child(2)").text

而我们定义的t主要是来获取文字变化后状态,因为该网站简历刷新后文字会变成“刷新成功”。以此我们可以来判断是否刷新成功。最后关闭driver,一定得关闭,不然Firefox可能还在后台运行。

#判断简历是否刷新成功
t = driver.find_element_by_css_selector("a.zp-pfme-funcs-link:nth-child(2) > p:nth-child(2)").textif "刷新成功" in t:  print("智联招聘简历刷新成功!\n")driver.close()

最后,liepin.com的操作方式大同小异,主要是在于www.liepin.com有反爬策略。对新手来说太友好。所以我选择了m.liepin.com来操作。不知道发了这篇文章后会不会加强m.liepin.com的反爬策略。哈哈!所以跟做安全一样,此路不通的时候,可以另辟蹊径。思路决定出路!代码如下:

def liepin(self):    try:        options = Options()        options.add_argument(‘-headless‘)        driver = Firefox(firefox_options=options)        driver.get(self.lp_url)        driver.find_element_by_name(‘user_login‘).send_keys(self.username)        driver.find_element_by_css_selector(‘div.inputzone:nth-child(3) > input:nth-child(2)‘).send_keys(self.password)        driver.find_element_by_css_selector(‘.btn‘).click()        sleep(3)        link = driver.find_element_by_css_selector(‘div.liepin-channel-list:nth-child(8) > div:nth-child(4) > a:nth-child(1)‘).get_attribute(‘href‘)        driver.get(link)        driver.find_element_by_css_selector(‘a.btn:nth-child(2)‘).click()        if driver.get_screenshot_as_file("success.png"):            print(‘猎聘网简历刷新成功!\n‘)        driver.close()    except Exception as e:        print("出现异常,程序将退出!\n")        print("具体错误如下:\n", e)        sys.exit(1)

0×04 总结

对于Selenium这个包来说,有很多用途,比如扫描工具可以使用它来进行模糊测试。此文主要是稍微浅显的说明下此模块的基本用法。还是那句话思路决定出路,idea是最宝贵的东西。大家多想多写,一定能成为安全界的大佬。

另外需要JAVA版的童鞋请私信我,谢谢!预告一下,下一次还有如何打造本地安全漏洞和安全工具的知识库的文章哦!欢迎关注自己动手打造工具系列文章! 欢迎关注Github: https://github.com/Hell0W0rld0。谢谢各位!最后附上完整代码:

# -*- coding: utf-8 -*-# Created by Allen

from selenium.webdriver import Firefoxfrom selenium.webdriver.firefox.options import Optionsfrom selenium.webdriver.common.keys import Keysimport argparseimport sysfrom time import sleep

class AutoJobHunter:def __init__(self, username, password):        # 登陆网站所需要的用户名和密码        self.username = username        self.password = password        # 需要自动刷新简历的网站        self.zp_url = ‘https://www.zhaopin.com‘        self.lp_url = ‘https://m.liepin.com/login/?url=https://m.liepin.com/cq/‘

def zhaopin(self):      try:            #实例化Options,为启动无GUI界面做准备            options = Options()            #添加无GUI模式启动浏览器选项            options.add_argument(‘-headless‘)            #实例化对象            driver = Firefox(firefox_options=options)            #使用webdriver请求url            driver.get(self.zp_url)            #定位元素,输入用户名和密码,然后进行提交操作            driver.find_element_by_name(‘loginname‘).send_keys(self.username)            driver.find_element_by_name(‘Password‘).send_keys(self.password)            driver.find_element_by_tag_name(‘button‘).submit()            sleep(3)            #定位元素,点击"刷新简历"            driver.find_element_by_css_selector("a.zp-pfme-funcs-link:nth-child(2) > div:nth-child(3)").click()            #获取页面变化部分,因为该位置会变化成"刷新成功"            t = driver.find_element_by_css_selector("a.zp-pfme-funcs-link:nth-child(2) > p:nth-child(2)").text            if "刷新成功" in t:              print("智联招聘简历刷新成功!\n")            driver.close()      except Exception as e:            print("出现异常,程序将退出!\n")            print("具体错误信息如下:\n", e)            sys.exit(1)

def liepin(self):      try:            options = Options()            options.add_argument(‘-headless‘)            driver = Firefox(firefox_options=options)            driver.get(self.lp_url)            driver.find_element_by_name(‘user_login‘).send_keys(self.username)            driver.find_element_by_css_selector(‘div.inputzone:nth-child(3) > input:nth-child(2)‘).send_keys(self.password)            driver.find_element_by_css_selector(‘.btn‘).click()            sleep(3)            link = driver.find_element_by_css_selector(‘div.liepin-channel-list:nth-child(8) > div:nth-child(4) > a:nth-child(1)‘).get_attribute(‘href‘)            driver.get(link)            driver.find_element_by_css_selector(‘a.btn:nth-child(2)‘).click()            if driver.get_screenshot_as_file("success.png"):               print(‘猎聘网简历刷新成功!\n‘)            driver.close()      except Exception as e:            print("出现异常,程序将退出!\n")            print("具体错误如下:\n", e)            sys.exit(1)

if __name__ == ‘__main__‘:    parser = argparse.ArgumentParser(description="自动刷新简历程序")    parser.add_argument(‘-u‘, ‘--username‘, help=‘Please input your username‘)    parser.add_argument(‘-p‘, ‘--password‘, help="Please input your password")    args = parser.parse_args()    username = args.username    password = args.passwordif username and password:        aj = AutoJobHunter(username, password)        aj.liepin()        aj.zhaopin()else:print(parser.usage)

原文地址:https://www.cnblogs.com/h2zZhou/p/9578163.html

时间: 2024-10-28 18:39:52

自己动手打造工具系列之自动刷新简历的相关文章

Browsersync 省时浏览器同步测试工具,浏览器自动刷新,多终端同步

官网地址 http://www.browsersync.cn/ 1.安装 BrowserSync npm install -g browser-sync 2.启动 BrowserSync // --files 路径是相对于运行该命令的项目(目录) browser-sync start --server --files "*.html" //如果您需要监听多个类型的文件,您只需要用逗号隔开.例如我们再加入一个.html文件 // --files 路径是相对于运行该命令的项目(目录) br

推荐开发工具系列之--PyF5(自动刷新)

昨天介绍的自动刷新的软件 推荐开发工具系列之--LinrF5(自动刷新)已经是很靠谱了:今天再介绍一款软件,同样靠谱:萝卜白菜各有所爱,看喜欢那种就用那种: 首先下载软件:http://pan.baidu.com/s/1bnttBTt 解压后双击f5.exe即可使用:绿色不用安装:然后复制项目的路径:按下面的截图输入后点击项目: 接着改文件看看效果: 支持Firefox,IE,各种手机浏览器哦,一个F5,所有客户端环境都能搞定,不需要像livereload一样装插件,F5自身就能支持带有服务器技

推荐开发工具系列之--LinrF5(自动刷新)

最近有点事:略忙:以至于上篇文章说好的明天一直到了今天才到: //*******************************分割是会呼吸的痛****************************** 作为一个程序员:尤其是作为一个网站开发程序员:如果再更尤其点作为一个前端程序员:想必有一套动作做的是相当的多:那就是不断的ctrl+s -> alt+tab -> F5 (就在打F5这2个字的时候竟然随手按了下F5,码的这些字瞬间就没了,还好ueditor足够强大自动保存了草稿可以恢复,真诚

使用Spring Boot开发者工具进行自动重启和页面自动刷新

简介 大家可能都听说过开发Node.js应用时可以使用多种工具对开发者提供便利,如WebPack提供了开发者服务器来支持js应用动态更替,并在保存文件时自动刷新浏览器.Spring Boot也提供了相似的开发者工具,让我们更快速.更舒心的开发Spring Boot应用.大家看完本教程就可以学会如何如用Spring Boot开发者工具进行自动重启和自动刷新页面. 自动重启原理 Spring Boot的开发者工具会为应用创建两个classloader.一个是用来加载不会变动的类,称为base cla

前端工具-浏览器同步测试(自动刷新、热刷新、热加载)

Browsersync 官网:https://www.browsersync.io/ 中文:http://www.browsersync.cn/ Gulp中使用 http://www.browsersync.cn/docs/gulp/ 注意1:我测试哪个tesk在下面哪个好使(要么能使用静态服务器,要么用代理?)貌似不能部分请求用代理.. var gulp = require('gulp'); var browserSync = require('browser-sync').create();

Map工具系列-06-销售营改增历史数据处理工具

所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map工具系列-04-SQL合并执行工具 Map工具系列-05-添加业务参数工具 Map工具系列-06-销售营改增历史数据处理工具 Map工具系列-07-TFS变更集提取工具 Map工具系列-08-map控件查看器 Map工具系列-09-文件自动对比合并工具 more... 微信小程序之明源商城系列 1.

【webpack】-- 自动刷新

前端需要频繁的修改js和样式,且需要根据浏览器的页面效果不断的做调整:而且往往我们的开发目录和本地发布目录不是同一个,修改之后需要发布一下:另外一点就是并不是所有的效果都可以直接双击页面就能看到,我们常常需要在本地用nginx建一个站点来观察(自己电脑上ok了才放到测试环境去).所以如果要用手工刷新浏览器和手动(或点击)发布,还要启动站点,确实是个不小的体力活.而这三点webpack可以帮我们做到. webpack-dev-server webpack是通过webpack-dev-server(

推荐开发工具系列之--FireGestures(火狐手势命令)

有一种懒叫做不想在浏览器上找刷新.后退按钮点击:以及新建一个浏览器标签页和关闭标签页等等: 恰好火狐有一个叫FireGestures,作用就是自定义一些手势,来完成刷新之类的命令:比如右键右滑刷新页面: 先来安装: 打开火狐浏览器,快捷键ctrl+shift+a  添加附加组件,如果快捷键被占用就点击工具->添加附加 然后搜索FireGestures找到这样一个插件安装 安装完成后点击此插件的'选项'按钮进行设置:这里以右键右滑刷新页面为例: 设置: 映射->重新载入->编辑:在箭头指示

BrowserSync,调试利器--自动刷新(转

---恢复内容开始--- 请想象这样一个场面:你开着两个显示器,一边是IDE里的代码,另一边是浏览器里的你正在开发的应用.此时桌上还放着你的手机,手机里也是这个开发中的应用.然后,你新写了一小段代码,按下了ctrl+s保存.紧接着,你的手机和另一个显示器里的应用,就变成了更新后的效果.你可以马上检查效果是否和你预想的一致,甚至都不需要动一下鼠标... 想起来还不错?嗯,这只是简单地省略掉那个开发过程中会按好多遍的F5刷新. 自动刷新 “自动刷新”并不是新的概念,但对关注“可见”的预览效果的前端开