簡體   English   中英

如何在 Python 中更改 chrome selenium 驅動程序的地理位置?

[英]How to change geolocation of chrome selenium driver in Python?

我試圖欺騙 chromedriver 讓它相信它在不同的城市運行。 在正常情況下,這可以很容易地手動完成,如快速圖表所示

這里

然后,當谷歌搜索完成時,使用新坐標,並顯示通常源自該位置的結果。 當您查看 Google 搜索頁面的底部時,您可以確認這是有效的

這里 .

但是,Selenium 只能控制瀏覽器顯示的內容,而不能控制瀏覽器本身。 我無法告訴 Selenium 自動單擊更改坐標所需的按鈕。 我嘗試了此處發布的解決方案但這不適用於 Python,即使在我嘗試調整腳本之后,似乎也沒有任何反應。

是否有一個可以工作的 browser.execute_script() 參數,或者這是更改地理位置的錯誤方法?

您可以通過導入 Selenium DevTools 包來做到這一點。 請參考以下完整的java代碼示例:

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;

public void geoLocationTest(){
  ChromeDriver driver = new ChromeDriver();
  Map coordinates = new HashMap()
  {{
      put("latitude", 50.2334);
      put("longitude", 0.2334);
      put("accuracy", 1);
  }};    
  driver.executeCdpCommand("Emulation.setGeolocationOverride", coordinates);
  driver.get("<your site url>");
}  

參考: 硒文檔

試試下面的代碼:

driver.execute_script("window.navigator.geolocation.getCurrentPosition=function(success){"+
                                        "var position = {\"coords\" : {\"latitude\": \"555\",\"longitude\": \"999\"}};"+
                                        "success(position);}");

    print(driver.execute_script("var positionStr=\"\";"+
                                    "window.navigator.geolocation.getCurrentPosition(function(pos){positionStr=pos.coords.latitude+\":\"+pos.coords.longitude});"+
                                    "return positionStr;"))

在尋找相同問題的解決方案時,我還遇到了已經存在的 postet 腳本。 雖然我還沒有找到解決方案,但我認為腳本不起作用,因為它們不會永久更改傳感器。 僅針對window.navigator.geolocation.getCurrentPosition特定調用更改傳感器。

該網站(在本例中為 google)稍后將調用相同的函數,但具有常規(未更改)的地理位置。 很高興聽到永久更改傳感器的解決方案,然后也會影響未來的地理定位請求。

這可以使用 Selenium 4 來完成。

HashMap<String ,Object> coordinate = new HashMap<String ,Object>();
        coordinate.put("latitude", 39.913818);
        coordinate.put("longitude", 116.363625);
        coordinate.put("accuracy", 1);
    ((ChromeDriver)driver).executeCdpCommand("Emulation.setGeolocationOverride",coordinate);
        driver.navigate().to("URL");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM