Java 当Selenium抛出pageLoadTimeout异常时,如何删除该块?

Java 当Selenium抛出pageLoadTimeout异常时,如何删除该块?,java,firefox,selenium-webdriver,Java,Firefox,Selenium Webdriver,我将uri列表加载到Java程序中,然后对于每个uri,我使用selenium导航到页面并执行一些分析。但是,我想限制等待时间,如果页面加载时间过长,只需跳过页面即可。例如,我导航到谷歌,大概需要5秒钟。但随后我浏览了一些随机的中文网站,30秒过去了,服务器仍然没有响应——Firefox只是坐在那里旋转着等待的小圈子 如果我使用pageLoadTimeout,Selenium似乎会引发异常,但它仍然存在,以便服务器在继续之前返回一些内容。我只想在它到达超时的那一刻跳过它,因为否则超时是毫无用处的

我将uri列表加载到Java程序中,然后对于每个uri,我使用selenium导航到页面并执行一些分析。但是,我想限制等待时间,如果页面加载时间过长,只需跳过页面即可。例如,我导航到谷歌,大概需要5秒钟。但随后我浏览了一些随机的中文网站,30秒过去了,服务器仍然没有响应——Firefox只是坐在那里旋转着等待的小圈子

如果我使用pageLoadTimeout,Selenium似乎会引发异常,但它仍然存在,以便服务器在继续之前返回一些内容。我只想在它到达超时的那一刻跳过它,因为否则超时是毫无用处的

以下是全部代码:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.*;
import org.openqa.selenium.remote.*;
import org.openqa.selenium.firefox.internal.ProfilesIni;
import org.openqa.selenium.firefox.FirefoxProfile;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.util.concurrent.TimeUnit;

public class scout  {
    public static void main(String[] args) {
        ProfilesIni allProfiles = new ProfilesIni();
        FirefoxProfile profile = allProfiles.getProfile("SeleniumProfile");
        WebDriver driver = new FirefoxDriver(profile);
        driver.manage().timeouts().pageLoadTimeout(3,TimeUnit.MILLISECONDS);

        BufferedReader in = null;
        List<String> myList = new ArrayList<String>();
        try {   
            in = new BufferedReader(new FileReader("scoutLinks.txt"));
            String str;
            while ((str = in.readLine()) != null) {
                myList.add(str);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        for(String item : myList ){
            try {
                driver.get(item);
            } catch (Exception e) {}

        }
        //Quit
        //driver.quit();
    }
}
import org.openqa.selenium.WebDriver;
导入org.openqa.selenium.WebElement;
导入org.openqa.selenium.firefox.FirefoxDriver;
导入org.openqa.selenium.support.ui.*;
导入org.openqa.selenium.remote.*;
导入org.openqa.selenium.firefox.internal.ProfilesIni;
导入org.openqa.selenium.firefox.FirefoxProfile;
导入java.util.*;
导入java.io.*;
导入java.lang.*;
导入java.util.concurrent.TimeUnit;
公营童子军{
公共静态void main(字符串[]args){
ProfilesIni allProfiles=新ProfilesIni();
FirefoxProfile=allProfiles.getProfile(“SeleniumProfile”);
WebDriver=新的FirefoxDriver(配置文件);
driver.manage().timeouts().pageLoadTimeout(3,TimeUnit.ms);
BufferedReader in=null;
List myList=new ArrayList();
试试{
in=新的BufferedReader(新的文件阅读器(“scoutLinks.txt”);
字符串str;
而((str=in.readLine())!=null){
myList.add(str);
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
用于(字符串项:myList){
试一试{
driver.get(项目);
}捕获(例外e){}
}
//退出
//driver.quit();
}
}
注意,我将超时时间设置为3毫秒,这对于测试来说是荒谬的,因此它将在几乎每个站点上超时。它抛出异常,但仍然坐在那里等待GET请求通过

更新:这里是stacktrace,当我启用stacktrace时,它抛出TimeoutException

org.openqa.selenium.TimeoutException: Timed out waiting for page load.
Command duration or timeout: 56 milliseconds
Build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:32:38'
System info: os.name: 'Windows 8', os.arch: 'amd64', os.version: '6.2', java.ver
sion: '1.7.0_10'
Session ID: e7c34ae4-027c-4bd4-974e-f314b9aa5c74
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=22.0}]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:191)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
    at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:276)
    at scout.main(scout.java:36)
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Timed out waiting for page load.
Build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:32:38'
System info: os.name: 'Windows 8', os.arch: 'amd64', os.version: '6.2', java.version: '1.7.0_10'
Driver info: driver.version: unknown
        at <anonymous class>.FirefoxDriver.prototype.get/<(file:///C:/Users/Nate/AppData/Local/Temp/anonymous7949477209431295646webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:8312)
        at <anonymous class>.WebLoadingListener/e(file:///C:/Users/Nate/AppData/Local/Temp/anonymous7949477209431295646webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:3263)
        at <anonymous class>.WebLoadingListener/<(file:///C:/Users/Nate/AppData/Local/Temp/anonymous7949477209431295646webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:3270)
        at <anonymous class>.fxdriver.Timer.prototype.setTimeout/<.notify(file:///C:/Users/Nate/AppData/Local/Temp/anonymous7949477209431295646webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:386)
org.openqa.selenium.TimeoutException:等待页面加载时超时。
命令持续时间或超时:56毫秒
构建信息:版本:“2.33.0”,修订版:“4e90c97”,时间:“2013-05-22 15:32:38”
系统信息:os.name:'windows8',os.arch:'amd64',os.version:'6.2',java.ver
赛昂:“1.7.0_10”
会话ID:e7c34ae4-027c-4bd4-974e-f314b9aa5c74
驱动程序信息:org.openqa.selenium.firefox.FirefoxDriver
功能[{platform=XP,databaseEnabled=true,cssSelectorsEnabled=true,javascriptEnabled=true,acceptSslCerts=true,handlesAlerts=true,browserName=firefox,browserConnectionEnabled=true,nativeEvents=true,webStorageEnabled=true,rotatable=false,locationContextEnabled=true,applicationCacheEnabled=true,takesscreensshot=true,version=22.0}]
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于org.openqa.selenium.remote.ErrorHandler.CreateTrowable(ErrorHandler.java:191)
位于org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
位于org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
位于org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:276)
在scout.main(scout.java:36)
原因:org.openqa.selenium.remote.ErrorHandler$UnknownServerException:等待页面加载超时。
构建信息:版本:“2.33.0”,修订版:“4e90c97”,时间:“2013-05-22 15:32:38”
系统信息:os.name:'Windows 8',os.arch:'amd64',os.version:'6.2',java.version:'1.7.0_10'
驱动程序信息:驱动程序。版本:未知

在.FirefoxDriver.prototype.get/中,可以对driver.get()代码使用try-catch块。在catch中,您可以实际打印页面未加载的url。不要在catch块中打印堆栈跟踪。这将再次停止执行。

public class Scout{
public class Scout  {
    public static void main(String[] args) {
        ProfilesIni allProfiles = new ProfilesIni();
        FirefoxProfile profile = allProfiles.getProfile("SeleniumProfile");
        WebDriver driver = null;


        BufferedReader in = null;
        List<String> myList = new ArrayList<String>();
        try {   
            in = new BufferedReader(new FileReader("scoutLinks.txt"));
            String str;
            while ((str = in.readLine()) != null) {
                myList.add(str);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        for(String item : myList ){

            try {
                if(driver == null)
                {
                    driver = new FirefoxDriver();
                    driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);
                }
                driver.get(item);
            } catch (Exception e) 
            {
                System.out.println("Did not get url");
                driver.quit();
                driver = null;
            }

        }

    }
}
公共静态void main(字符串[]args){ ProfilesIni allProfiles=新ProfilesIni(); FirefoxProfile=allProfiles.getProfile(“SeleniumProfile”); WebDriver=null; BufferedReader in=null; List myList=new ArrayList(); 试试{ in=新的BufferedReader(新的文件阅读器(“scoutLinks.txt”); 字符串str; 而((str=in.readLine())!=null){ myList.add(str); } }catch(filenotfounde异常){ e、 printStackTrace(); }捕获(IOE异常){ e、 printStackTrace(); } 用于(字符串项:myList){ 试一试{ if(驱动程序==null) { 驱动程序=新的FirefoxDriver(); driver.manage().timeout().pageLoadTimeout(10,TimeUnit.SECONDS); } driver.get(项目); }捕获(例外e) { System.out.println(“未获取url”); driver.quit(); 驱动程序=null; } } } }
这是我在这里发布之前尝试过的方法,可惜没有成功。你能发布整个try-catch-for-get方法吗?还有堆栈跟踪(如果有),请使用下面的代码。由于您要导航到单独的链接,因此如果