一、寫在前面
關於爬取高德興趣點邊界坐標網上有幾篇文章介紹實現方式,總的來說就是通過https://www.amap.com/detail/get/detail傳入POI的ID值獲取數據,BUT,如果實際操作過就會發現,然並卵。
二、主角出場
這里提供一個思路具體怎么應用大家自己把握。Selenium作為Web應用程序自動化測試工具,通過WebDriver實現多種瀏覽器(包括Chrome、Firefox、IE、Edge等)訪問網頁、設置代理、設置緩存、切換選項卡,而且還能通過findElement方法類似WebMagic的文檔操作功能。
Selenium使用方法分三步
1、引入pom依賴:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
2、Web瀏覽器,目前支持的瀏覽器如圖:

3、下載Web瀏覽器對應的WebDriver;
三、三部曲之谷歌瀏覽器
1)安裝谷歌瀏覽器,最好使用安裝版的,用便攜版可能會出現org.openqa.selenium.WebDriverException: unknown error: cannot find Chrome binary錯誤,需要設置谷歌瀏覽器主程序路徑,代碼如下:
ChromeOptions options = new ChromeOptions(); options.setBinary("Chrome的啟動文件路徑"); WebDriver driver = new ChromeDriver(options);
2)下載谷歌瀏覽器對應的WebDriver瀏覽器驅動程序,需要下載與谷歌瀏覽器版本對應的驅動程序,下載地址:https://chromedriver.storage.googleapis.com/index.html
3)測試代碼:
public class SeleniumChromeTest { public static void main(String args[]) throws Exception { ChromeDriver driver = null; try { //設置chrome瀏覽器驅動的所在位置 // 可以設置系統環境變量省略此代碼 System.setProperty("webdriver.chrome.driver","C:\\Users\\chromedriver\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); // 設置IP代理 Proxy proxy = new Proxy(); proxy.setHttpProxy("ip:port"); options.setProxy(proxy); // Chrome瀏覽器驅動 driver = new ChromeDriver(options); // 清理所有cookie driver.manage().deleteAllCookies(); // 請求POI頁面 driver.get("https://www.amap.com/place/B001B0IZY1"); // 跳轉到POI邊界坐標資源請求接口 driver.navigate().to("https://www.amap.com/detail/get/detail?id=B001B0IZY1&smToken=token&smSign=undefined"); // 打印網頁源代碼 System.out.println(driver.getPageSource()); } catch (Exception e) { e.printStackTrace(); } finally { driver.quit(); } } }
測試谷歌瀏覽器發現即使采用代理IP方式訪問,每次都會彈出機器人效驗,而且效驗一直通過不了,可能瀏覽器本身發送了自動化測試程序的信息到服務端。
四、三部曲之Edge
換一個”單純“一點的瀏覽器。
1)Win10系統自帶Edge瀏覽器,不用額外安裝,Win10以下的同學請跳過這段;
2)下載Edge瀏覽器驅動程序,下載地址https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/,這里有一點要注意Edge內核分為Chromium和EdgeHTML,內核不一樣驅動程序也是不一樣的,另外根據官方描述:
Microsoft WebDriver for Microsoft Edge version 18 is a Windows Feature on Demand. To install run the following in an elevated command prompt: DISM.exe /Online /Add-Capability /CapabilityName:Microsoft.WebDriver~~~~0.0.1.0 For builds prior to 18, download the approriate driver for your installed version of Microsoft
EdgeHTML18的版本不用額外下載驅動程序,直接在CMD中執行如下命令方式安裝驅動程序,並且程序中不用設置環境變量
DISM.exe /Online /Add-Capability /CapabilityName:Microsoft.WebDriver~~~~0.0.1.0
3)測試代碼參考谷歌瀏覽器實現。
測試結果,Edge瀏覽器驅動程序設置IP代理會報錯,這是因為Edge的IP代理就是Windows的代理,無法單獨對Edge進行代理設置。錯誤信息如下:
org.openqa.selenium.InvalidArgumentException: The specified arguments passed to the command are invalid.
Edge Chromium內核的沒有測試過設置IP代理,有興趣的同學可以測試一下。
五、三部曲之IE
谷歌和Edge測試完以后發現都有缺陷,最后只能嘗試IE瀏覽器。
1)Windows自帶了IE瀏覽器;
2)下載IE瀏覽器驅動程序,下載地址:https://selenium-release.storage.googleapis.com/index.html,版本和Selenium版本對應版本選擇32為驅動程序,即使是64位操作系統也要選擇32位驅動程序,否則會出現指令執行不成功(例如無法獲取cookie)等問題,如圖:

3)測試代碼參考谷歌瀏覽器實現。
測試發現IE瀏覽器也有個問題,跳轉到https://www.amap.com/detail/get/detail頁面后IE不會再網頁顯示JSON數據,而是下提供JSON文件下載。
以上是使用Selenium爬取POI邊界坐標的測試過程,如需交流可以發站內信給我。
