zoukankan      html  css  js  c++  java
  • [python] boss直聘自动搜索简历聊天HR机器人


    前言

    该机器人完全仿照人是如何操作的,进行简历搜索和自动打招呼。


    1、首先进行几个关键位置的标定

    1)简历的左上角
    2)简历的”打招呼“按钮
    3)聊天对话框的输入文字框的位置
    4)关闭聊天对话框的按钮的位置
    5)”下一个“按钮的位置

    将上面5个位置定义为P1~P5

    标定相关的代码:

    pos1 = Point(0,0)
    pos2 = Point(0,0)
    pos3 = Point(0,0)
    pos4 = Point(0,0)
    pos5 = Point(0,0)
    def get_key_pos():
        last_time = time.time()
        step = -1
        
        print("标定开始...")
        while 1<2:
            t = time.time() - last_time
            if  t > 5:
                last_time = time.time()
                if step == -1:
                    print("请点击一次简历左上角的空白处,并保持不动")
                    step = 0
                elif step == 0:
                    pos1.x,pos1.y = m.position()
                    print("请点击一次打招呼,并保持不动")
                    step = 1
                elif step == 1:
                    pos2.x,pos2.y = m.position()
                    print("请点击一次文字输入框,并保持不动")
                    step = 2
                elif step == 2:
                    pos3.x,pos3.y = m.position()
                    print("请点击一次关闭对话框,并保持不动")
                    step = 3
                elif step == 3:
                    pos4.x,pos4.y = m.position()
                    print("请点击一次下一个(如果下一个右边有下拉滚动条,则放在下一个的右侧边缘,否则放在左侧边缘),并保持不动")
                    step = 4
                elif step == 4:
                    pos5.x,pos5.y = m.position()
                    print(pos1,pos2,pos3,pos4,pos5)
                    return
    

    2、拖拽鼠标复制简历的文字,并进行字符串匹配,对候选人进行人物画像和打分

    def people_filter():
        drag(Point(pos1.x,pos1.y),Point(pos1.x,1000),2,0)
        drag(Point(pos1.x,1000),Point(935,655),1)
    
        k.press_key(k.control_key)
        k.tap_key('c')
        time.sleep(1)
        k.release_key(k.control_key)
    
        m.move(1334, 461)      
        m.scroll(10)
    
        text = pyperclip.paste()
        ret = text.find("看过Ta的人还联系了")   #推荐信息给过滤掉
        if ret != -1:
            text = text[:ret]
            #print(text)
    
        #print("分析:",text)
    
        value = int(0)
        richness = text.count("
    ") #根据多少行判断是否丰富
        print(">>> 候选人,人物画像: ")
        print("> 简历丰富度(多少行):",richness)
        if richness > 35:
            print("> 简历:丰富")
            value = value + 5
        else:
            print("> 简历:不丰富")     
    
        if text.find("本科") != -1:
            print("> 本科:YES")
        else: 
            print("> 本科:NO")
    
    	#...省略很多关键词匹配的代码
    
        print("> 总分:", value)
    
        if value < 10:
            return 0
        else:
            return 1
    

    这里用了 PyMouse、PyKeyboard(用python操作鼠标和键盘)模块,其中drag函数实现从Point1拖拽到Point2,最后一个参数为0表示拖拽完毕不松手,为1表示拖拽完毕松手。因此:

    • people_filter 函数的前两行实现的功能是: 从简历的左上角向下拖拽到屏幕外(实现全选),然后再从屏幕外拖拽到简历的右下角
    • 接下来 4 行利用 PyKeyboard 发送 ctrl+c 的命令,进行复制
    • 接下来从剪切板中取出刚刚复制的内容 text = pyperclip.paste()
    • 最后进行关键词匹配

    3、筛选、聊天、下一个全流程状态机

    m = PyMouse()
    k = PyKeyboard()
    
    def hr_start():
        get_key_pos()
    
        last_time = time.time()
        step = -1
        while 1<2:
            t = time.time() - last_time
            if  t > 2:
                if step == -1:
                    if people_filter() == 1:
                        step = 0
                    else:
                        step = 4
                elif step == 0:
                    m.click(pos2.x, pos2.y, 1)     
                    step = 1
                    print("沟通")
                elif step == 1:
                    m.click(pos2.x, pos2.y, 1)      
                    step = 2
                    pyperclip.copy("您好~方便简历发过来吗?")
                    print("打开沟通对话框")
                elif step == 2:
                    m.click(pos3.x, pos3.y , 1)     
                    k.press_key(k.control_key)
                    k.tap_key('v')
                    time.sleep(1)
                    k.release_key(k.control_key)
                    k.tap_key(k.enter_key)
                    step = 3
                    print("输入一句话")
                elif step == 3:
                    m.click(pos4.x, pos4.y, 1)      #取整除 - 向下取接近除数的整数
                    step = 4
                    print("关闭沟通")
                elif step == 4:
                    m.click(pos5.x, pos5.y, 1)
                    time.sleep(1)
                    step = -1
                    print("下一个")
    
                #print("time=",t)
                last_time = time.time()
    
    

    逻辑比较简单:如果筛选的人满足条件,则进行沟通,索要简历,如果不行继续下一个


    附录

    1.完整代码 wget http://tuchuang.beautifulzzzz.com:3000/?path=/56/90620e0ab9098ef485037ad1eb5d31.png ,然后重命名为.py,使用python3
    2.[python] PyMouse、PyKeyboard用python操作鼠标和键盘


    : 希望这个简单的小 DEMO 能帮助你理解 python 的对鼠标键盘操作的模块~
    千万不要用这种程序去做坏事~

  • 相关阅读:
    I.MX6 fbset 使用
    I.MX6 Android 设备节点权限
    使用Android Studio自带的NDK编译JNI
    I.MX6 网卡能收不能发
    make: *** No rule to make target `out/target/common/obj/APPS/framework-res_intermediates/src/R.stamp'
    Linux 监视文件、文件夹改动
    如何定位web前后台的BUG
    <转>SQL语句大全
    软件测试基础理论(三)
    软件测试基础理论(二)
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/13782277.html
Copyright © 2011-2022 走看看