Java自動化——使用Selenium+POI實(shí)現(xiàn)Excel自動化批量查單詞

寫在最前

相信大家都對爬蟲非常熟悉简烘,一般來說,利用HttpClient發(fā)送請求并獲取響應(yīng)以獲得想要提取的數(shù)據(jù)應(yīng)該是最常用的方法扎拣。最近工作中頻繁使用了Selenium腌歉,在本文中依痊,我們將使用Selenium和POI(讀寫Excel)來完成一個入門級的自動化程序避除,源碼地址見附錄。

步驟一覽

  1. 使用Maven創(chuàng)建工程胸嘁,引入Selenium和POI依賴
  2. 下載ChromeDriver并配置環(huán)境變量
  3. 編寫Selenium查詞腳本
  4. 讀寫Excel并保存
  5. 編寫main方法瓶摆,運(yùn)行程序

現(xiàn)在開始

  1. 使用Maven創(chuàng)建工程,引入Selenium和POI依賴

    1.1 下載Maven性宏,配置環(huán)境變量

    Windows和Mac將Maven目錄地址寫入path即可群井,具體步驟可百度,Google衔沼,十分常見蝌借。

    1.2 在IDEA中配置Maven

    IDEA自帶Maven可能版本非最新,建議自行引入本地最新版本指蚁。

1.3 創(chuàng)建工程

創(chuàng)建工程時只要使用最基礎(chǔ)的模板菩佑,也就是直接點(diǎn)擊next。


image

1.4 在mvnrepository.com搜索Selenium,POI和POI-ooxml依賴凝化,將其引入pom.xml,并在右下角點(diǎn)擊import change稍坯,最終pom.xml加入內(nèi)容如下:

 <dependencies>
     <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
     <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-java</artifactId>
         <version>3.14.0</version>
     </dependency>
     <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
     <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi</artifactId>
         <version>4.0.0</version>
     </dependency>
     <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
     <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi-ooxml</artifactId>
         <version>4.0.0</version>
     </dependency>
 </dependencies>
  1. 下載ChromeDriver并配置環(huán)境變量(三選一)

    2.1 在鏡像站下載ChromeDriver,配置環(huán)境變量

    自行手動下載ChromeDriver后如不配置環(huán)境變量搓劫,需在代碼中加上System.setProperty("webdriver.chrome.driver",path); 其中path是你的driver路徑瞧哟。

    2.2 Windows使用choco install直接安裝

    2.3 Mac使用brew install cask直接安裝

  2. 編寫Selenium查詞腳本

    3.1 創(chuàng)建Search類,編寫setUp方法
    在setUp中枪向,首先需要初始化WebDriver勤揩,然后訪問到有道首頁,搜索test點(diǎn)擊確定并跳轉(zhuǎn)至搜索頁秘蛔,注意在driver訪問此頁面時會彈出廣告陨亡,需要一行代碼來抓取關(guān)閉鏈接關(guān)掉廣告,代碼如下:

    //Direct to YoudaoDic homepage, land in the main search page
     public void setUp() {
         //Go to youdao.com
         driver.get(YOUDAO_HOME_URL);
         driver.manage().window().maximize();
         //Go to the main search page
         driver.findElement(By.id(INPUT_HOME_ID)).sendKeys("test");
         driver.findElement(By.xpath(SEARCH_HOME_XPATH)).click();
         driver.findElement(By.xpath(CLOSE_BTN)).click();
     }
    

    3.2 編寫searchWord腳本方法

    searchWord方法需要傳入你要搜索的單詞深员,然后抓取搜索框负蠕,輸入后點(diǎn)擊確認(rèn)。這時你將獲得搜索詳情的頁面倦畅,其中你需要抓取中文翻譯的div并且獲取其中文字遮糖,代碼如下:

    //Search word and get the translation
     public String searchword(String s) {
         //Find the input element, input the word and click the button
         WebElement input_search = driver.findElement(By.id(INPUT_SEARCH));
         input_search.clear();
         input_search.sendKeys(s);
         driver.findElement(By.xpath(SEARCH_BTN_XPATH)).click();
         //Get the text inside translation div
         String result = driver.findElement(By.className(TRANSLATION_CLASS)).getText();
         return result;
     }
    
  3. 讀寫Excel并保存

    4.1 創(chuàng)建Excel文件并寫入單詞

    新建一個Excel,然后在最左邊第一列填入一些單詞叠赐,注意欲账,不要有空行屡江,本文代碼中沒有帶異常處理,空行會報(bào)錯敬惦。


    image

    4.2 編寫Excelio類盼理,編寫read方法

    利用poi框架谈山,與普通文件讀寫異曲同工俄删,代碼如下:

    public Workbook read(int columnIndex, int count) throws IOException {
        FileInputStream fis = null;
        fis = new FileInputStream(new File(path));
        //Input and save as a xlsx workbook
        Workbook workbook = new XSSFWorkbook(fis);
        fis.close();
        return workbook;
    }
    

    4.3 編寫searchWord方法

    調(diào)用Search類的searchWord進(jìn)行搜索,然后將獲取到的String寫入Excel奏路,代碼如下:

    //Search the word and write down
     public void searchWord(Workbook workbook, int columnIndex, int count) {
         //Initialize driver
         WebDriver driver = new ChromeDriver();
         Search search = new Search(driver);
         search.setUp();
         //Search for all words in one column and print to another column
         for (int i = 0; i < count; i++) {
             //Get value of the cell and get the translation through search method
             Sheet sheet = workbook.getSheetAt(0);
             Row row = sheet.getRow(i);
             Cell cell = row.getCell(columnIndex);
             String results = search.searchword(cell.getStringCellValue());
             //Write the translation to another column
             Cell temp = row.createCell(columnIndex+1);
             temp.setCellValue(results);
             //Set the new column as "Wrap Text"
             CellStyle cellStyle = workbook.createCellStyle();
             cellStyle.setWrapText(true);
             temp.setCellStyle(cellStyle);
             sheet.setColumnWidth(1,31*256);
         }
    

    4.4 編寫save方法

    使用FileOutputStream畴椰,保存Excel,代碼如下:

     //Save the change
     public void save(Workbook workbook) throws IOException {
         FileOutputStream outputStream = new FileOutputStream(path);
         workbook.write(outputStream);
         outputStream.close();
         workbook.close();
     }
    
  4. 編寫main方法鸽粉,運(yùn)行程序

    編寫入口方法斜脂,代碼如下:

//Entrance
    public static void main(String[] args) throws IOException {
        Excelio excelio = new Excelio("src/main/resources/wordlist/test.xlsx");
        Workbook workbook = excelio.read(0, 30);
        excelio.searchWord(workbook,0,30);
        excelio.save(workbook);
    }

結(jié)果展示

Excel


image

過程


image

結(jié)語

本文是為Selenium的入門而設(shè)計(jì),后續(xù)作者將在此基礎(chǔ)上触机,將Selenium結(jié)合JavaWeb帚戳,更新自動化WebApp的文章,敬請期待儡首。如有疑問歡迎留言交流片任,歡迎issue和PR,感謝閱讀蔬胯。

附錄

源碼地址:https://gitee.com/daniel_ddd/selenium-poi-test

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末对供,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子氛濒,更是在濱河造成了極大的恐慌产场,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舞竿,死亡現(xiàn)場離奇詭異京景,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)骗奖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門确徙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人重归,你說我怎么就攤上這事米愿。” “怎么了鼻吮?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵育苟,是天一觀的道長。 經(jīng)常有香客問我椎木,道長违柏,這世上最難降的妖魔是什么博烂? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮漱竖,結(jié)果婚禮上禽篱,老公的妹妹穿的比我還像新娘。我一直安慰自己馍惹,他們只是感情好躺率,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著万矾,像睡著了一般悼吱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上良狈,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天后添,我揣著相機(jī)與錄音,去河邊找鬼薪丁。 笑死遇西,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的严嗜。 我是一名探鬼主播粱檀,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阻问!你這毒婦竟也來了梧税?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤称近,失蹤者是張志新(化名)和其女友劉穎第队,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刨秆,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凳谦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了衡未。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尸执。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缓醋,靈堂內(nèi)的尸體忽然破棺而出如失,到底是詐尸還是另有隱情,我是刑警寧澤送粱,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布褪贵,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脆丁。R本人自食惡果不足惜世舰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望槽卫。 院中可真熱鬧跟压,春花似錦、人聲如沸歼培。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丐怯。三九已至喷好,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間读跷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工禾唁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留效览,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓荡短,卻偏偏與公主長得像丐枉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掘托,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容