Java+Selenium爬取高德POI邊界坐標


一、寫在前面

      關於爬取高德興趣點邊界坐標網上有幾篇文章介紹實現方式,總的來說就是通過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邊界坐標的測試過程,如需交流可以發站內信給我。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM