Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不捕捉非接触性异常_Java_Selenium_Web Scraping - Fatal编程技术网

Java 不捕捉非接触性异常

Java 不捕捉非接触性异常,java,selenium,web-scraping,Java,Selenium,Web Scraping,我正在抓取一个网站的固定装置,然后使用另一个网站检查每个团队的表格。我遇到的问题是,表单网站上并不存在所有团队,对于那些在URL not found页面上不存在xPath清除的团队,我会得到一个NoTouchElementException。我正试图捕捉异常,但程序仍然中断 我添加了一个try-catch,但它不能解决我的问题,程序以未找到的团队的形式一到达就中断 for(int i = 0; i < fixtures.getAwayTeams().size(); i++) {

我正在抓取一个网站的固定装置,然后使用另一个网站检查每个团队的表格。我遇到的问题是,表单网站上并不存在所有团队,对于那些在URL not found页面上不存在
xPath
清除的团队,我会得到一个
NoTouchElementException
。我正试图捕捉异常,但程序仍然中断

我添加了一个try-catch,但它不能解决我的问题,程序以未找到的团队的形式一到达就中断

 for(int i = 0; i < fixtures.getAwayTeams().size(); i++)
 {
     driver.navigate().to(FORMURL.concat( (fixtures.getAwayTeams().get(i)).replace( ' ', '+' )));          
     for (int j = 1; j < 11; j++) {
        String xPath = FORMXPATHONE.concat( String.valueOf( j ) ).concat(FORMXPATHTWO);
        try {
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xPath)));
            forms = driver.findElementsByXPath( xPath );
            } catch(NoSuchElementException | StaleElementReferenceException e) {
            awayTeamForm.add("No Form for Team");
            }
        for (WebElement languageElement : forms) {
            ArrayList <String> wld = new ArrayList<String>();
            wld.add( languageElement.getText() );
            String listedForm = String.join(",", wld );
            awayTeamForm.add(listedForm);
        }
    }
    }
 }  
for(int i=0;i
原因:org.openqa.selenium.NoSuchElementException:无法定位元素://*[@id=“results”]/table/tbody/tr[1]/td[6]


您的
try-catch
语句看起来不错。也就是说,问题必须在其他地方


您使用的是selenium,这意味着有两个异常称为NoTouchElementException。检查您的导入。您最可能遇到的问题是,您确实导入了
java.util.NoSuchElementException
,而不是
org.openqa.selenium.NoSuchElementException

,您可以通过首先获取元素列表,然后检查该列表的大小来检查该元素是否存在于页面上,如果大于0,则该元素存在,否则该元素不在页面上。这样,您也不需要捕获异常

你可以这样做:

List<WebElement> elementList = driver.findElements(By.xpath("xPath"));
if(elementList.size()>0){
    // Element is present
}
else{
    // Element is not present
}
List elementList=driver.findElements(By.xpath(“xpath”);
if(elementList.size()>0){
//元素存在
}
否则{
//元素不存在
}

尝试捕获整个循环体并进行调试,以查看是否捕获了正确的异常和正确的行。 你确定只有

forms = driver.findElementsByXPath( xPath );
是否可以引发异常?

尝试以下操作:

try {
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xPath)));
        forms = driver.findElementsByXPath( xPath );
        } catch(NoSuchElementException | StaleElementReferenceException | TimeoutException e) {
            awayTeamForm.add("No Form for Team");
    }

您可能捕获了错误的
NoTouchElementException
。有一个默认的
java.util.NoSuchElementException
,您可能会捕获到它,而代码抛出一个
org.openqa.selenium.NoSuchElementException
我已经检查并导入了org.openqa.selenium.NoSuchElementException;而不是strage中的java.util.NoSuchelementException。你能把完整的StackTrace贴出来吗?也许有什么东西能给我一个更好的暗示,我可能看错了。似乎我得到了一个由NoTouchElementException引起的TimeoutException,也许我需要捕获一个TimeoutException?线程“main”org.openqa.selenium.TimeoutException中的异常:预期条件失败:等待by.xpath://*定位的元素的可见性由以下原因引起:org.openqa.selenium.NoSuchElementException:无法定位元素://*[@id=“results”]/table/tbody/tr[1]/td[6],因为我正在第一次执行此操作
等待.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath));
当它看不到元素时,我不会得到异常吗?不,它不工作(您也面临着这个问题)因为当元素不在页面上时,它会抛出一个空指针异常。这只在元素在页面上但不可见时才起作用。在您的情况下,元素不在页面上,所以您需要使用我在回答中提到的方法。虽然我不知道为什么它缺少异常,但这解决方案确实有效。thread“main”org.openqa.selenium.StaleElementReferenceException中的Exception:的元素引用已过时;元素不再附加到DOM,不在当前框架上下文中,或者文档已刷新以获取有关此错误的文档,请访问: