寫在最前
相信大家都對爬蟲非常熟悉简烘,一般來說,利用HttpClient發(fā)送請求并獲取響應(yīng)以獲得想要提取的數(shù)據(jù)應(yīng)該是最常用的方法扎拣。最近工作中頻繁使用了Selenium腌歉,在本文中依痊,我們將使用Selenium和POI(讀寫Excel)來完成一個入門級的自動化程序避除,源碼地址見附錄。
步驟一覽
- 使用Maven創(chuàng)建工程胸嘁,引入Selenium和POI依賴
- 下載ChromeDriver并配置環(huán)境變量
- 編寫Selenium查詞腳本
- 讀寫Excel并保存
- 編寫main方法瓶摆,運(yùn)行程序
現(xiàn)在開始
-
使用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。
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>
-
下載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直接安裝
-
編寫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; }
-
讀寫Excel并保存
4.1 創(chuàng)建Excel文件并寫入單詞
新建一個Excel,然后在最左邊第一列填入一些單詞叠赐,注意欲账,不要有空行屡江,本文代碼中沒有帶異常處理,空行會報(bào)錯敬惦。
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(); }
-
編寫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
過程
結(jié)語
本文是為Selenium的入門而設(shè)計(jì),后續(xù)作者將在此基礎(chǔ)上触机,將Selenium結(jié)合JavaWeb帚戳,更新自動化WebApp的文章,敬請期待儡首。如有疑問歡迎留言交流片任,歡迎issue和PR,感謝閱讀蔬胯。