最近想試試找工作,是以在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同城的自動登入,打開履歷管理頁面,并自動反複重新整理所有履歷,永遠排在前面。