天天看點

python+selenium實作58同城履歷自動重新整理,永排第一

  最近想試試找工作,是以在58同城上放了履歷,這個網站的履歷管理裡有一個功能,就是重新整理,每刷一次,自己履歷就會變成剛剛修改過的,排在該類的最前面,相當于手工置頂。

  于是我想用python來實作自動點選。網上找了很多資料,有兩個包很合适,一個是splinter,一個是selenium。

剛開始我用splinter,結果沒裝firefox,就去裝了。

#coding=utf-8

import time

from splinter import Browser

def splinter(url):

    browser = Browser()

    #進入網站

    browser.visit(url)

    #選擇郵箱登陸

    browser.find_by_id('login_tab_orig').click()

    #填寫賬号密碼

    browser.find_by_id('username_new').fill('[email protected]')

    browser.find_by_id('password_new').fill('xxxxxxxxxx')

    #點選登陸按鈕

    browser.find_by_id('btnSubmit_new').click()

    #打開我的履歷菜單

    browser.find_by_id('menu4').click()

    #打開履歷管理

    browser.find_by_id('20').click()

if __name__ == '__main__':

    websize ='https://passport.58.com/login?path=http://my.58.com/?pts=xxxxxxxxx'

    splinter(websize)

splinter登陸,點選,打開菜單都可以,但是最後點選就是找不到重新整理那個按鈕,各種辦法都試了。css,id,name,text,link,都找過,不行。

後來用selenium試試,跟之前的情況一樣,也是到最後也一步找不到重新整理按鈕在哪兒。

再搜尋,發現有一個selenium IDE可以裝在Firefox上,錄制我的網頁操作,我去裝了,這個很爽,網頁上的點選,輸入,移動,都可以錄下來,可以回放,可以導出成各種語言的代碼,我選了python,後來一看,發現在最後那個頁面,履歷和相關的功能是在另一個Frame裡面,難怪之前一直找不都。

于是就加了driver.switchto().frame('ContainerFrame‘),後面是那個frame的名字

然後再在這個frame裡尋找text ‘重新整理’,就可以找到了。

代碼很直白,沒有用class,函數等,直接運作。

# -*- coding: utf-8 -*-

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.support.ui import Select

import time

driver = webdriver.Firefox()

driver.implicitly_wait(30)

base_url = "http://wh.58.com/"

driver.get(base_url + "/")

driver.find_element_by_id("tomy58").click()

driver.find_element_by_id("login_tab_orig").click()

driver.find_element_by_id("username_new").clear()

driver.find_element_by_id("username_new").send_keys("lx'x'x'x'x'x'x")

driver.find_element_by_id("password_new").clear()

driver.find_element_by_id("password_new").send_keys("xxxxxxx")

driver.find_element_by_id("btnSubmit_new").click()

driver.find_element_by_id("menu4").click()

driver.find_element_by_id("20").click()

#這之前的跟splinter一樣,下面進入frame

driver.switch_to.frame("ContainerFrame")

#設定一個無限循環,但是隔五秒重新整理,以免太快出問題。

#有一點特别注意,因為有多個履歷,重新整理這個詞不止一個,

#是以我把找到的元素存進清單,循環點選。

while True:

    list = driver.find_elements_by_link_text(u"重新整理")

    for i in range(3):

        list[i].click()

    time.sleep(5)

有個小細節,在‘重新整理’前,加了一個字母u,這是專門處理漢字的。

另外list不能放在while循環之外,我試過,後來說每次周遊之後,重新整理的位置改變,無法找到,是以隻能每次重新找一次。

最後在selenium中,find_elements_by_,,,,,,和find_element_by.......,這兩個隻有一個s的差別,但是前者可以找到多個特征相同的元素,後者隻有一個。

通過python+selenium實作了58同城的自動登入,打開履歷管理頁面,并自動反複重新整理所有履歷,永遠排在前面。