在 Selenium WebDriver 中浏览时避免执行停止
Avoid the execution stop while browsing in Selenium WebDriver
我需要帮助来解决这件让我发疯的事情。
我想在无限循环中检查浏览器 url,在一个循环和另一个循环之间稍等 (Thread.Sleep),以免 CPU 过载。然后,如果浏览器url是我需要的,我想在页面完全加载之前通过Java脚本add/change/remove一个元素,否则使用这个的人可以看到变化。 (我不需要 javascript 部分的帮助)
但是有一个问题:似乎在 Selenium Webdriver 中,当我导航到一个页面时(使用 .get()、.navigate().to() 或直接从客户端),执行被迫停止,直到页面加载完毕.
我尝试设置 "fake" 超时,但是(至少在 Chrome 中)当它捕获 TimeoutException 时,页面停止加载。我知道在 Firefox 中有一个用于不稳定加载的选项,但我不想使用它,因为我的程序不仅适用于 Firefox。
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().pageLoadTimeout(0, TimeUnit.MILLISECONDS); // Fake timeout
while (true) {
try {
// If the url (driver.getCurrentUrl()) is what I want, then execute javascript without needing that page is fully loaded
// ...
// ...
}
catch (TimeoutException e) {
// It ignores the Exception, but unfortunately the page stops loading.
}
Thread.sleep(500); // Then wait some time to not overload the cpu
}
}
我需要在 Chrome 中执行此操作,如果可能,请使用 Firefox 和 Internet Explorer。我正在 Java 编程。提前致谢。
Selenium 设计为在网页加载到浏览器后停止,以便继续执行。
对于您的情况,有两种选择:
1) 如果浏览器 url 会在任意时间自动更改 (ajax),那么请继续获取浏览器 url 直到您的条件满足。
while(currentURL.equals("Your Condition")){
currentURL = driver.getCurrentUrl();
Thread.sleep(2000);
}
2) 如果浏览器需要刷新,请循环使用刷新方法,直到获得所需的 url
while(currentURL.equals("Your Condition")){
driver.navigate().refresh();
currentURL =
Thread.sleep(2000);
}
众所周知,如果用户尝试使用 driver.get("url");,selenium 会等待页面加载完毕(可能不会很长)。所以如果你想在导航到 URL 时做一些事情而不等待总加载时间使用下面的代码而不是 get 或 navigate
JavascriptExecutor js=(JavascriptExecutor)driver;
js.executeScript("window.open('http://seleniumtrainer.com/components/buttons/','_self');");
此后使用
driver.findElement(By.id("button1")).click();
单击按钮,但我没有收到此类元素异常,因此我预计它不会等待页面加载。所以页面加载速度非常快,点击工作正常。
我希望这能帮助您解决启动时遇到的问题。 for循环我希望已经提供了解决方案。
谢谢
我需要帮助来解决这件让我发疯的事情。 我想在无限循环中检查浏览器 url,在一个循环和另一个循环之间稍等 (Thread.Sleep),以免 CPU 过载。然后,如果浏览器url是我需要的,我想在页面完全加载之前通过Java脚本add/change/remove一个元素,否则使用这个的人可以看到变化。 (我不需要 javascript 部分的帮助) 但是有一个问题:似乎在 Selenium Webdriver 中,当我导航到一个页面时(使用 .get()、.navigate().to() 或直接从客户端),执行被迫停止,直到页面加载完毕. 我尝试设置 "fake" 超时,但是(至少在 Chrome 中)当它捕获 TimeoutException 时,页面停止加载。我知道在 Firefox 中有一个用于不稳定加载的选项,但我不想使用它,因为我的程序不仅适用于 Firefox。
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().pageLoadTimeout(0, TimeUnit.MILLISECONDS); // Fake timeout
while (true) {
try {
// If the url (driver.getCurrentUrl()) is what I want, then execute javascript without needing that page is fully loaded
// ...
// ...
}
catch (TimeoutException e) {
// It ignores the Exception, but unfortunately the page stops loading.
}
Thread.sleep(500); // Then wait some time to not overload the cpu
}
}
我需要在 Chrome 中执行此操作,如果可能,请使用 Firefox 和 Internet Explorer。我正在 Java 编程。提前致谢。
Selenium 设计为在网页加载到浏览器后停止,以便继续执行。
对于您的情况,有两种选择:
1) 如果浏览器 url 会在任意时间自动更改 (ajax),那么请继续获取浏览器 url 直到您的条件满足。
while(currentURL.equals("Your Condition")){
currentURL = driver.getCurrentUrl();
Thread.sleep(2000);
}
2) 如果浏览器需要刷新,请循环使用刷新方法,直到获得所需的 url
while(currentURL.equals("Your Condition")){
driver.navigate().refresh();
currentURL =
Thread.sleep(2000);
}
众所周知,如果用户尝试使用 driver.get("url");,selenium 会等待页面加载完毕(可能不会很长)。所以如果你想在导航到 URL 时做一些事情而不等待总加载时间使用下面的代码而不是 get 或 navigate
JavascriptExecutor js=(JavascriptExecutor)driver;
js.executeScript("window.open('http://seleniumtrainer.com/components/buttons/','_self');");
此后使用
driver.findElement(By.id("button1")).click();
单击按钮,但我没有收到此类元素异常,因此我预计它不会等待页面加载。所以页面加载速度非常快,点击工作正常。
我希望这能帮助您解决启动时遇到的问题。 for循环我希望已经提供了解决方案。
谢谢