我正在尝试欺骗chromedriver,使其相信它正在其他城市中运行。在正常情况下,如快速图表所示,可以轻松地手动完成此操作
然后,当完成google搜索时,将使用新坐标,并显示通常从该位置开始的结果。您可以确认当您查看Google搜索页底部时
是否可行。
但是,Selenium只能控制浏览器显示的内容,而不能控制浏览器本身。我不能告诉Selenium自动单击更改坐标所需的按钮。我尝试了发布于here的解决方案,但这并不适合Python,即使在尝试修改脚本后,似乎也没有任何反应。
是否存在可以使用的browser.execute_script()参数,或者这是更改地理位置的错误方法吗?
答案 0 :(得分:1)
您可以通过导入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>");
}
答案 1 :(得分:0)
在下面尝试以下代码:
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;"))
答案 2 :(得分:0)
在寻找解决同一问题的方法时,我还遇到了已经存在的postet脚本。虽然我尚未找到解决方案,但我认为这些脚本无法正常工作,因为它们不会永久更改传感器。仅针对window.navigator.geolocation.getCurrentPosition
的一个特定调用更改传感器。
该网站(在本例中为google)稍后将调用相同的功能,但具有常规的(不变的)地理位置。很高兴听到永久更换传感器的解决方案,从而影响以后的地理位置要求。
答案 3 :(得分:0)
这可以使用硒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");