Firefox webdriver 始终打开第一个 运行 页面
Firefox webdriver opens first run page all the time
如何为 FF 一劳永逸地禁用此 "first run" 页面?
创建 FF 驱动程序时,它会打开选项卡 -
https://www.mozilla.org/en-US/firefox/42.0/firstrun/learnmore/
以及带有目标页面的附加标签。
我找到了解决方案,效果很好
FirefoxProfile fp = new FirefoxProfile();
fp.setPreference("browser.startup.homepage", "about:blank");
fp.setPreference("startup.homepage_welcome_url", "about:blank");
fp.setPreference("startup.homepage_welcome_url.additional", "about:blank");
我遇到过同样的问题。我刚刚将Selenium版本更改为2.48,问题解决了。
要关闭这个烦人的起始页:
在带有 Selenium 2.48 的 C# 中,我找到了以下解决方案:
FirefoxProfile prof = new FirefoxProfile();
prof.SetPreference("browser.startup.homepage_override.mstone", "ignore");
prof.SetPreference("startup.homepage_welcome_url.additional", "about:blank");
Driver = new FirefoxDriver(prof);
...它再也不会打扰你了。
注意:仅这些设置之一也可以。我将它们一起使用,使之成为 bullet-proof.
以上解决办法都不行,我都试过了。
对我有用并且可能对你有用(如果使用 firefox 43 或更低版本)的是:
prof.setPreference("xpinstall.signatures.required", false);
prof.setPreference("toolkit.telemetry.reportingpolicy.firstRun", false);
43 和 selenium 的问题是双重的,默认的签名扩展设置(为 true)和第一个 运行 页面。这些线解决了这两个问题。这些必须以编程方式设置。如果您尝试在 about:config 中设置它们(或直接在 prefs.js 中),它不会影响您使用 selenium 打开的新浏览器。应该注意的是,他们说 firefox 44 不允许您设置已签名的扩展变量(因此这不适用于 44)。
我包含了我现在工作代码中的代码块,显示了正确的用法:
FirefoxProfile prof = new FirefoxProfile();
//FirefoxProfile prof = profile.getProfile("default");
//prof.setPreference("browser.startup.homepage", proteinPageUrl);
//prof.setPreference("startup.homepage_welcome_url", proteinPageUrl);
//prof.setPreference("startup.homepage_welcome_url.additional", proteinPageUrl);
prof.setPreference("xpinstall.signatures.required", false);
prof.setPreference("toolkit.telemetry.reportingpolicy.firstRun", false);
//Object socketLock = new Object();
//synchronized(socketLock){
//driver = new FirefoxDriver();
driver = new FirefoxDriver(prof);
//driver = forceInit();
//driver.open();
//}//end synch block
//get protein page
boolean done = true;
do{
driver.get(proteinPageUrl);
final Wait<WebDriver> waitDriver = new FluentWait<WebDriver>(driver)
.withTimeout(30, java.util.concurrent.TimeUnit.SECONDS)
.pollingEvery(5, java.util.concurrent.TimeUnit.SECONDS);
try{
inputTextFeildElement = waitDriver.until(new Function<WebDriver,WebElement>(){
public WebElement apply(WebDriver diver){
return driver.findElement(By.name("term"));
}});
}
catch(NoSuchElementException nsee){
//if not find by name try find by id
if(driver.findElements(By.id("term")).size() != 0){
try{
inputTextFeildElement = driver.findElement(By.id("term"));
done = true;
} catch(NoSuchElementException nsee2){
synchronized(threadLogFile){
try {
threadLogWriter = new PrintWriter(new FileWriter(threadLogFile.getAbsoluteFile(), true));
} catch (IOException ioe) {
System.out.println("error opening file for append: " + ioe.getMessage());
ioe.printStackTrace();
}//catch
threadLogWriter.println("Thread Id: " + threadId + " with thread name: " + threadName + " fails to find input element by name or id to put accession: " + accession);
threadLogWriter.flush();
threadLogWriter.close();
}//synchronized
done = false;
}//catch nsee2
}//catch nsee
}
catch(ElementNotVisibleException enve){
done = false;
}
}while(!done);
C# 解决方案,将 Selenium WebDriver 升级到 2.49.0 解决了我的问题。
这是由于 Selenium 和 Firefox 版本不兼容引起的,而不是由任何一个特定的版本号引起的。
如果您的 WebDriver 是最新版本,您应该比最新版本落后 1-2 个 Firefox 版本。否则,如果您的 WebDriver 较旧,请进一步回退 Firefox 版本,或者升级 Webdriver。
要获取旧版 Firefox,请尝试 https://ftp.mozilla.org/pub/firefox/releases/ or http://www.oldapps.com/
或 Linux,取决于您的发行版
yum list --showduplicates firefox
sudo yum install firefox-<version>
或
apt-cache show firefox | grep Version
sudo apt-get install firefox=<version>
如果您使用来自 Capybara/Cucumber 的 selenium webdriver,那么您可以在使用 startup.homepage_welcome_url.additional
:
注册您的驱动程序时更改默认值 url
Capybara.register_driver :firefox do |app|
profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.startup.homepage_override.mstone'] = 'ignore'
profile['startup.homepage_welcome_url.additional'] = 'about:blank'
Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
end
我遇到了同样的问题。
我的解决方案:
- 我将 Firefox 降级到 36.0.
- 它在 Selenium 2.53.1 上运行良好。
希望对您有所帮助。 :)
如何为 FF 一劳永逸地禁用此 "first run" 页面?
创建 FF 驱动程序时,它会打开选项卡 - https://www.mozilla.org/en-US/firefox/42.0/firstrun/learnmore/ 以及带有目标页面的附加标签。
我找到了解决方案,效果很好
FirefoxProfile fp = new FirefoxProfile();
fp.setPreference("browser.startup.homepage", "about:blank");
fp.setPreference("startup.homepage_welcome_url", "about:blank");
fp.setPreference("startup.homepage_welcome_url.additional", "about:blank");
我遇到过同样的问题。我刚刚将Selenium版本更改为2.48,问题解决了。
要关闭这个烦人的起始页:
在带有 Selenium 2.48 的 C# 中,我找到了以下解决方案:
FirefoxProfile prof = new FirefoxProfile();
prof.SetPreference("browser.startup.homepage_override.mstone", "ignore");
prof.SetPreference("startup.homepage_welcome_url.additional", "about:blank");
Driver = new FirefoxDriver(prof);
...它再也不会打扰你了。
注意:仅这些设置之一也可以。我将它们一起使用,使之成为 bullet-proof.
以上解决办法都不行,我都试过了。 对我有用并且可能对你有用(如果使用 firefox 43 或更低版本)的是:
prof.setPreference("xpinstall.signatures.required", false);
prof.setPreference("toolkit.telemetry.reportingpolicy.firstRun", false);
43 和 selenium 的问题是双重的,默认的签名扩展设置(为 true)和第一个 运行 页面。这些线解决了这两个问题。这些必须以编程方式设置。如果您尝试在 about:config 中设置它们(或直接在 prefs.js 中),它不会影响您使用 selenium 打开的新浏览器。应该注意的是,他们说 firefox 44 不允许您设置已签名的扩展变量(因此这不适用于 44)。
我包含了我现在工作代码中的代码块,显示了正确的用法:
FirefoxProfile prof = new FirefoxProfile();
//FirefoxProfile prof = profile.getProfile("default");
//prof.setPreference("browser.startup.homepage", proteinPageUrl);
//prof.setPreference("startup.homepage_welcome_url", proteinPageUrl);
//prof.setPreference("startup.homepage_welcome_url.additional", proteinPageUrl);
prof.setPreference("xpinstall.signatures.required", false);
prof.setPreference("toolkit.telemetry.reportingpolicy.firstRun", false);
//Object socketLock = new Object();
//synchronized(socketLock){
//driver = new FirefoxDriver();
driver = new FirefoxDriver(prof);
//driver = forceInit();
//driver.open();
//}//end synch block
//get protein page
boolean done = true;
do{
driver.get(proteinPageUrl);
final Wait<WebDriver> waitDriver = new FluentWait<WebDriver>(driver)
.withTimeout(30, java.util.concurrent.TimeUnit.SECONDS)
.pollingEvery(5, java.util.concurrent.TimeUnit.SECONDS);
try{
inputTextFeildElement = waitDriver.until(new Function<WebDriver,WebElement>(){
public WebElement apply(WebDriver diver){
return driver.findElement(By.name("term"));
}});
}
catch(NoSuchElementException nsee){
//if not find by name try find by id
if(driver.findElements(By.id("term")).size() != 0){
try{
inputTextFeildElement = driver.findElement(By.id("term"));
done = true;
} catch(NoSuchElementException nsee2){
synchronized(threadLogFile){
try {
threadLogWriter = new PrintWriter(new FileWriter(threadLogFile.getAbsoluteFile(), true));
} catch (IOException ioe) {
System.out.println("error opening file for append: " + ioe.getMessage());
ioe.printStackTrace();
}//catch
threadLogWriter.println("Thread Id: " + threadId + " with thread name: " + threadName + " fails to find input element by name or id to put accession: " + accession);
threadLogWriter.flush();
threadLogWriter.close();
}//synchronized
done = false;
}//catch nsee2
}//catch nsee
}
catch(ElementNotVisibleException enve){
done = false;
}
}while(!done);
C# 解决方案,将 Selenium WebDriver 升级到 2.49.0 解决了我的问题。
这是由于 Selenium 和 Firefox 版本不兼容引起的,而不是由任何一个特定的版本号引起的。
如果您的 WebDriver 是最新版本,您应该比最新版本落后 1-2 个 Firefox 版本。否则,如果您的 WebDriver 较旧,请进一步回退 Firefox 版本,或者升级 Webdriver。
要获取旧版 Firefox,请尝试 https://ftp.mozilla.org/pub/firefox/releases/ or http://www.oldapps.com/
或 Linux,取决于您的发行版
yum list --showduplicates firefox
sudo yum install firefox-<version>
或
apt-cache show firefox | grep Version
sudo apt-get install firefox=<version>
如果您使用来自 Capybara/Cucumber 的 selenium webdriver,那么您可以在使用 startup.homepage_welcome_url.additional
:
Capybara.register_driver :firefox do |app|
profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.startup.homepage_override.mstone'] = 'ignore'
profile['startup.homepage_welcome_url.additional'] = 'about:blank'
Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
end
我遇到了同样的问题。 我的解决方案:
- 我将 Firefox 降级到 36.0.
- 它在 Selenium 2.53.1 上运行良好。
希望对您有所帮助。 :)