Excel操作網頁資料進行大量批次查詢

前言:

手邊有將近上萬筆的鄉鎮及地段地號需要填寫入地政司網站查詢是否有合併或分割情勢,並回傳更新後的地段地號,一筆筆看著打進去網站裡面的相對應欄位是一件很折磨人的事情。憑藉著先前研究過Selenium的印象,想必Excel也能有這項Library可以引用才是。

經研究後,發現透過應用SeleniumBasic+chrome driver就能達到自動操作網頁的效果了,省時間又準確,特此紀錄與網友分享。


環境設定:

  1. 安裝SeleniumBasic(下載請點我)
  2. 確認Excel的開發人員頁面可否引用Selenium Type Library
  3. 確認自身電腦的chrome版本
  4. 安裝相對應版本的chrome driver(下載請點我)
  5. 如果需要的話可以先安裝SeleniumIDE以便之後可以用錄製的方式確認。(下載請點我)
操作流程:

    先透過SeleniumIDE錄製要執行的動作後輸出為C#檔,畫面如下




    觀察上述錄製出的程式碼,裡面最常出現的查找物件有
  • FindElement(By.CssSelector("xxxx"))
  • FindElement(By.Name("xxxx"))
  • FindElement(By.XPath("xxxx"))
  • FindElement(By.LinkText("xxxx"))
    觀察上述錄製出的程式碼,裡面最常出現的物件行為有
  • Click()
  • SendKeys("xxx")
    由此可知在Selenium的世界裡面,
    第一步會是先找物件,第二步就是要針對物件要做什麼事情。

在Excel的語法中,若要進行查找物件的方法僅需要更改為
  • FindElementByCss
  • FindElementByName
  • FindElementByXpath
  • FindElementByLinkText

範例程式碼如下:

Sub seleniumTest()

Dim driver As New WebDriver

g1 = "集集鎮"
g2 = "廣明段"
n1 = "0097"
n2 = "0000"

With driver

    .Start "Chrome"
    .Get ("https://www.land.moi.gov.tw/chhtml/landnoqry/51")
    .FindElementByCss("area:nth-child(17)").Click
    .SwitchToNextWindow
    .FindElementByLinkText("測量類").Click
    .FindElementByLinkText("分割合併地建號").Click
    .FindElementByName("SiteArea").Click
    Set DropDown = .FindElementByName("SiteArea")
    DropDown.FindElementByXPath("//option[. = '" & g1 & "']").Click
    .FindElementByName("R48check").Click
    Set DropDown = .FindElementByName("SiteArea")
    DropDown.FindElementByXPath("//option[. = '" & g2 & "']").Click
    .FindElementByName("NUM1").Click
    .FindElementByName("NUM1").SendKeys (n1)
    .FindElementByName("NUM2").Click
    .FindElementByName("NUM2").SendKeys (n2)
    .FindElementByName("button1").Click
    Application.Wait (Now + TimeValue("00:00:10")) '加這段才知道停在哪裡

End With

End Sub


留言

Popular Posts

Excel VBA @ 監造日報表、查驗表 -2

ExcelVBA@施工照片整理的應用範例

Excel VBA@ 監造日報表、查驗表