我正在运行 Python/Chromedriver/GoogleChrome/Selenium headless 在 python 上,我在弄清楚如何以编程方式设置自定义地理位置长/纬度时遇到了一些麻烦;以下代码不会更新 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
})
我可以使用以下命令调用并设置/获取地理位置长/纬度:
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;"))
这确实返回我设置的更新的经度/纬度。 但是当使用https://www.infobyip.com/browsergeolocation.php时或http://google.com ,它不会获取新的地理位置并且不起作用。
如何使用 chromedriver 配置参数、chrome 开发工具以编程方式或通过修改 chrome 配置文件目录中的文件来设置自定义地理位置? pythons selenium on stack Overflow 的其他答案似乎在这里不起作用。
最佳答案
现在实际上可以使用 Chrome Devtools 协议(protocol) (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')
关于python - 如何在 Python/Chromedriver/Selenium 中设置模拟地理位置长/纬度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58514585/