天天看點

[python] boss直聘自動搜尋履歷聊天HR機器人

目錄

  • 前言
  • 1、首先進行幾個關鍵位置的标定
  • 2、拖拽滑鼠複制履歷的文字,并進行字元串比對,對候選人進行人物畫像和打分
  • 3、篩選、聊天、下一個全流程狀态機
  • 附錄

該機器人完全仿照人是如何操作的,進行履歷搜尋和自動打招呼。

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
           

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("\n") #根據多少行判斷是否豐富
    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()

  • 最後進行關鍵詞比對

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)
                #可以不用點選下一個,而用快捷按鈕:CTRL+右
                #https://cloud.tencent.com/developer/article/1406355
                k.press_key(k.control_key)
                k.tap_key('Right')
                time.sleep(1)
                k.release_key(k.control_key)
                time.sleep(1)

                step = -1
                print("下一個")

            #print("time=",t)
            last_time = time.time()

           

邏輯比較簡單:如果篩選的人滿足條件,則進行溝通,索要履歷,如果不行繼續下一個

1.完整代碼(GITHUB) https://github.com/oldprogram/boss_hr_robot

2.[python] PyMouse、PyKeyboard用python操作滑鼠和鍵盤

: 希望這個簡單的小 DEMO 能幫助你了解 python 的對滑鼠鍵盤操作的子產品~
千萬不要用這種程式去做壞事~
[python] boss直聘自動搜尋履歷聊天HR機器人