使用HtmlUnit實現自動打卡

        打卡制度由來已久,對於公司管理員工的出勤比較重要,存在也是合情合理,但對於程序員這個嚮往彈性工作的羣體,內心裏還是不太樂意,遂利用HtmlUnit寫了一個自動打卡的工具,放到公司內網,通過Crontab實現自動打卡,本意不在打卡,更多是爲了學習HtmlUnit,爲將來實現自動化測試熱身。^_^

        對於網頁解析部分,僅適用於我所在的公司的打卡頁面,如果有同學恰好也需要這個功能,需要自己再查資料修改代碼了

package com.xx.AutoAttendance;

/**
 * 自動打卡考勤程序,根據頁面不同,解析網頁的代碼需要修改
 * @author Chris.Xiao
 */

import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;

public class AutoAttendance
{  
    public static void main(String [] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException
    {   
        String LOGIN_URL = "http://kaoqin.xx.com";
        //模擬一個瀏覽器  
        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2);  

        //設置webClient的相關參數 
        webClient.setJavaScriptEnabled(true);
    
        webClient.setCssEnabled(false);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());  
        webClient.setTimeout(35000);  
        webClient.setThrowExceptionOnScriptError(false);  
        //模擬瀏覽器打開目標網址  
        HtmlPage loginPage= webClient.getPage(LOGIN_URL);  
    
        System.out.println(loginPage.asText());
        System.out.println(loginPage.getTitleText());
        System.out.println(loginPage.getTextContent());
    
        // 根據form的名字獲取頁面表單,也可以通過索引來獲取:page.getForms().get(0)
        final HtmlForm form = loginPage.getFormByName("login_form");
    
        // 1.登錄:用戶名/密碼
        HtmlTextInput userName = form.getInputByName("username"); 
        userName.setValueAttribute("YourName");
        HtmlPasswordInput userPwd = form.getInputByName("password");
        userPwd.setValueAttribute("YourPassword");
    
        final HtmlSubmitInput subBtn = (HtmlSubmitInput)loginPage.getByXPath("//input").get(2);
        System.out.println(subBtn.asText());
    
        final HtmlPage targetPage = subBtn.click();
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        // 2.打卡:找到打卡button打卡
        HtmlAnchor anchor = (HtmlAnchor) targetPage.getByXPath("//*[@id=\"clockIn\"]").get(0);
        HtmlPage finalPage = anchor.click();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println(finalPage.asText());
    }
}

代碼裏有幾處sleep3秒鐘,是因爲點擊後,需要跳轉時間,如果點擊後,馬不停蹄的走下去,頁面還沒有跳轉完畢,後面的解析會失敗。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章