如何使用 Selenium 允许位置访问?
How can I allow location access using Selenium?
我想在 Java 中使用 Selenium 来获取用户的地理坐标,但是使用 IP 地址不够准确,所以我想使用这个网站 http://www.whataremycoordinates.com/,但它不是无法正常工作,我猜这是因为您必须允许使用位置,所以无论如何我可以允许在 Selenium 中使用位置,或者也许可以通过其他方式获得精确的地理坐标
通常,当网站想要获取此类数据时,浏览器会询问您是否要共享您的位置。问题在弹出窗口中,无法用 selenium
控制。在这种情况下,你需要告诉浏览器,不要打开弹窗,同时允许分享你的位置,这样弹窗就不会在第一时间打开。
对于Firefox
,您需要:
- 打开网站
- 允许分享你的位置(你也可以勾选
about:permissions
查看设置)
- 保存当前的 firefox 配置文件
- 启动 firefox,
FirefoxProfile
指向您之前保存的配置文件
有关详细信息,请参阅:
- Custom Firefox Profile for Selenium
- How to open specified profile Firefox with Selenium 2 Webdriver?
- How to use custom Firefox Profile with Selenium? (Java) (And pass HTML Authorization Window)
- Change GeoLocation using Selenium WebDriver in Firefox
- Webdriver: Click "Share Location" button in Firefox
您可以在创建驱动程序时注入 firefox 配置文件
我正在使用的 selenium 3 如果您使用的是 selenium 2,则无需 firefoxOptions,您可以直接将配置文件传递给驱动程序。
lat-log-json:How to enable geolocation permissions for a website in firefox profile using selenium webdriver
FirefoxOptions opt = getFirefoxOptions();
WebDriver webDriver = new FirefoxDriver(opt);
//method for fire fox profile//////////////////////////////////
public static FirefoxProfile getFirefoxProfile() {
ProfilesIni profileIni = new ProfilesIni();
FirefoxProfile profile = profileIni.getProfile("webDriverProfile");
System.out.println("profile is null : " + (profile == null));
if (profile == null) {
profile = new FirefoxProfile();
}
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", "download/path");
profile.setPreference(
"browser.helperApps.neverAsk.saveToDisk",
"application/pdf,application/octet-stream,"
+ "application/download,text/html,application/xhtml+xml");
profile.setPreference("pdfjs.disabled", true);
// profile.setPreference("dom.webnotifications.enabled", true);
profile.setPreference("geo.enabled", true);
profile.setPreference("geo.provider.use_corelocation", true);
profile.setPreference("geo.prompt.testing", true);
profile.setPreference("geo.prompt.testing.allow", true);
profile.setPreference("geo.wifi.uri", "path-to-loglatjson\geo-location-ITPL.json");
// profile.setPreference("browser.helperApps.neverAsk.openFile",
// "application/pdf");
// profile.setPreference("browser.helperApps.alwaysAsk.force", false);
/*
* profile.setPreference("browser.download.manager.alertOnEXEOpen",
* false);
* profile.setPreference("browser.download.manager.focusWhenStarting",
* false); profile.setPreference("browser.download.manager.useWindow",
* false);
* profile.setPreference("browser.download.manager.showAlertOnComplete",
* false);
* profile.setPreference("browser.download.manager.closeWhenDone",
* false);
*/
return profile;
}
我想在 Java 中使用 Selenium 来获取用户的地理坐标,但是使用 IP 地址不够准确,所以我想使用这个网站 http://www.whataremycoordinates.com/,但它不是无法正常工作,我猜这是因为您必须允许使用位置,所以无论如何我可以允许在 Selenium 中使用位置,或者也许可以通过其他方式获得精确的地理坐标
通常,当网站想要获取此类数据时,浏览器会询问您是否要共享您的位置。问题在弹出窗口中,无法用 selenium
控制。在这种情况下,你需要告诉浏览器,不要打开弹窗,同时允许分享你的位置,这样弹窗就不会在第一时间打开。
对于Firefox
,您需要:
- 打开网站
- 允许分享你的位置(你也可以勾选
about:permissions
查看设置) - 保存当前的 firefox 配置文件
- 启动 firefox,
FirefoxProfile
指向您之前保存的配置文件
有关详细信息,请参阅:
- Custom Firefox Profile for Selenium
- How to open specified profile Firefox with Selenium 2 Webdriver?
- How to use custom Firefox Profile with Selenium? (Java) (And pass HTML Authorization Window)
- Change GeoLocation using Selenium WebDriver in Firefox
- Webdriver: Click "Share Location" button in Firefox
您可以在创建驱动程序时注入 firefox 配置文件
我正在使用的 selenium 3 如果您使用的是 selenium 2,则无需 firefoxOptions,您可以直接将配置文件传递给驱动程序。
lat-log-json:How to enable geolocation permissions for a website in firefox profile using selenium webdriver
FirefoxOptions opt = getFirefoxOptions();
WebDriver webDriver = new FirefoxDriver(opt);
//method for fire fox profile//////////////////////////////////
public static FirefoxProfile getFirefoxProfile() {
ProfilesIni profileIni = new ProfilesIni();
FirefoxProfile profile = profileIni.getProfile("webDriverProfile");
System.out.println("profile is null : " + (profile == null));
if (profile == null) {
profile = new FirefoxProfile();
}
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", "download/path");
profile.setPreference(
"browser.helperApps.neverAsk.saveToDisk",
"application/pdf,application/octet-stream,"
+ "application/download,text/html,application/xhtml+xml");
profile.setPreference("pdfjs.disabled", true);
// profile.setPreference("dom.webnotifications.enabled", true);
profile.setPreference("geo.enabled", true);
profile.setPreference("geo.provider.use_corelocation", true);
profile.setPreference("geo.prompt.testing", true);
profile.setPreference("geo.prompt.testing.allow", true);
profile.setPreference("geo.wifi.uri", "path-to-loglatjson\geo-location-ITPL.json");
// profile.setPreference("browser.helperApps.neverAsk.openFile",
// "application/pdf");
// profile.setPreference("browser.helperApps.alwaysAsk.force", false);
/*
* profile.setPreference("browser.download.manager.alertOnEXEOpen",
* false);
* profile.setPreference("browser.download.manager.focusWhenStarting",
* false); profile.setPreference("browser.download.manager.useWindow",
* false);
* profile.setPreference("browser.download.manager.showAlertOnComplete",
* false);
* profile.setPreference("browser.download.manager.closeWhenDone",
* false);
*/
return profile;
}