【发布时间】:2022-02-05 00:22:21
【问题描述】:
我正在访问一个魁北克法律网站,我正在尝试从网络上抓取其所有法律名称及其相关的 PDF。执行此操作时,我打开每条法律的每个选项卡,然后浏览所有这些选项卡以获取我正在寻找的信息。但是,在浏览选项卡一段时间后,我收到以下错误:“线程“主”中的异常 org.openqa.selenium.NoSuchWindowException:没有这样的窗口:目标窗口已经关闭“。我不确定为什么会出现这种情况。我相信这是因为标签的数量是如此之长,因为我用于较少数量的标签的相同代码可以正常工作。这是我的代码:`
System.setProperty("webdriver.chrome.driver", "C:\\WorkSpace\\Driver\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5000));
driver.manage().window().maximize();
driver.get("http://www.legisquebec.gouv.qc.ca/en/chapters?corpus=regs&selection=all");
wait.until(ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector("tr.clickable a"), 100));
Thread.sleep(50);
List<WebElement> QuebecConsolidatedRegulations = driver.findElements(By.cssSelector("tr.clickable a"));
String parent = driver.getWindowHandle();
for (int i=0; i<QuebecConsolidatedRegulations.size(); i++){
String opentabs = Keys.chord(Keys.CONTROL, Keys.ENTER);
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", QuebecConsolidatedRegulations.get(i));
Thread.sleep(300);
wait.until(ExpectedConditions.visibilityOf(QuebecConsolidatedRegulations.get(i)));
QuebecConsolidatedRegulations.get(i).sendKeys(opentabs);
}
int i=0;
Set<String> tabs = driver.getWindowHandles();
for (String child:tabs){
// try{
if (!parent.equalsIgnoreCase(child)){
driver.close();
driver.switchTo().window(child);
String StatuteName = driver.findElement(By.xpath("//*[@id='form']/div[2]/div[1]/h3")).getText();
String pagePdfUrl = driver.findElement(By.xpath("//*[@id='renditionPdf']")).getAttribute("href");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
if (i<QuebecConsolidatedRegulations.size()){
ConsolidatedRegulationsAndPDFs.put(StatuteName, pagePdfUrl);
i+=1;
}
else{
continue;
}
}
// }
// catch(NoSuchWindowException e){
// continue;
// }
}
return ConsolidatedRegulationsAndPDFs;
}`
【问题讨论】:
-
请告诉我们错误来自哪一行。另外,您说您尝试减少标签并且有效?为什么不在同一个标签中打开所有法律?
-
我很抱歉。第 117 行是错误发生的地方。另外我不确定我应该如何在一个标签中打开所有法律?打开法律会导致一个新选项卡。您的意思是打开一项法律,然后返回主页以访问其他法律吗?
标签: java selenium web-scraping