如何在 Python/Chromedriver/Selenium 中设置模拟地理位置长/纬度

evi*_*ats 2 python selenium google-chrome google-chrome-devtools selenium-chromedriver

我在 python 上运行 Python/Chromedriver/GoogleChrome/Selenium headless,并且在弄清楚如何以编程方式设置自定义地理位置长/纬度时遇到了一些麻烦;以下代码不会更新 google.com 或https://www.infobyip.com/browsergeolocation.php上的位置

目前我正在使用以下选项启动 chromedriver:

chrome_options.add_experimental_option("prefs", { 
    "profile.default_content_setting_values.media_stream_mic": 1, 
    "profile.default_content_setting_values.media_stream_camera": 1,
    "profile.default_content_setting_values.geolocation": 1, 
    "profile.default_content_setting_values.notifications": 1,
    "profile.default_content_settings.geolocation": 1,
    "profile.default_content_settings.popups": 0
  })
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令调用并设置/获取地理位置长/纬度:

    driver.execute_script("""navigator.geolocation.getCurrentPosition = function(success, failure) { 
      success({ 
        coords: {latitude: -43.5333, longitude: 172.633}, 
        timestamp: Date.now(), 
      }); 
    }"""); 
    time.sleep(5) 
    print(driver.execute_script("var positionStr=\"\";"+ 
                                "window.navigator.geolocation.getCurrentPosition(function(pos){positionStr=pos.coords.latitude+\":\"+pos.coords.longitude});"+
                                "return positionStr;"))
Run Code Online (Sandbox Code Playgroud)

这确实返回我设置的更新的经度/纬度。但是当使用https://www.infobyip.com/browsergeolocation.phphttp://google.com时,它不会获取新的地理位置并且不起作用。

如何使用 chromedriver 配置参数、chrome 开发工具以编程方式或通过修改 chrome 配置文件目录中的文件来设置自定义地理位置?pythons selenium on stack Overflow 的其他答案似乎在这里不起作用。

Dir*_* N. 5

实际上现在可以使用 Chrome Devtools 协议 (cdp) 进行编程:

params = {
    "latitude": 50.1109,
    "longitude": 8.6821,
    "accuracy": 100
}

driver = webdriver.Chrome()
driver.execute_cdp_cmd("Page.setGeolocationOverride", params)
driver.get('https://www.google.com/maps')
Run Code Online (Sandbox Code Playgroud)

  • 截至 2022 年 9 月,它对使用 Selenium 4、Python 3.10.7 的 google 地图没有影响。像“curl ipconfig.io/json”之类的东西似乎正在决定谷歌地图的地理位置。 (2认同)