【发布时间】:2020-02-19 05:06:31
【问题描述】:
我正在运行 Python/Chromedriver/GoogleChrome/Selenium 无头 在 python 上,我在弄清楚如何以编程方式设置自定义地理定位 long/lat 时遇到了一些麻烦;以下代码未更新 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
})
我可以使用这些命令调用和设置/获取地理位置 long/lat:
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 配置文件目录中的文件来设置自定义地理位置? python selenium on stack overflow的其他答案似乎在这里不起作用。
【问题讨论】:
-
这不是程序化的——但你试过 Chrome 开发者——传感器并改变位置吗?
-
是的,我有并且它有效,这就是我目前正在研究的。抱歉稍微重新表述一下这个问题,但有人知道如何使用 chrome 远程开发工具从 python/selenium/chromedriver 设置自定义模拟传感器位置吗?
-
我已经能够通过 socketio 连接到远程 devtools 调试器,我发送这个: { "id": 5, "method": "Emulation.setGeolocationOverride", "params": { " latitude": 27.1752868, "longitude": 78.040009, "accuracy": 100 } } 并得到响应:'{"id":5,"result":{}}' 然后我将页面更改为:{"id" : 6, "method": "Page.navigate", "params": { "url": "infobyip.com/browsergeolocation.php" } } 但它仍然无法识别地理位置。无头构建中是否禁用了此功能?
-
我仍然无法让它工作
-
我最终学习了 CDP 并使用 websockets 和 chrome 调试协议设置了模拟地理位置。它们是 chrome 中的一项功能,可让您查看 cdp 的 json 请求和响应,因为它在 devtools 中发生。在我与之交互时查看实际协议的作用,可以更轻松地找到在实际产品中使用所需的请求和响应格式
标签: python selenium google-chrome selenium-chromedriver google-chrome-devtools