Я пробовал простую программу, которая перемещается и извлекает данные с новой страницы, возвращается в историю и открывает другую страницу, извлекает данные и так далее, пока все ссылки не будут посещены и данные не будут получены.
Получив результаты на указанном ниже сайте, я пытаюсь просмотреть все ссылки, которые я получаю в первом столбце, открывать эти ссылки одну за другой и извлекать текст с каждой из этих страниц. Но приведенная ниже программа посещает только первую ссылку и выдает исключение StaleElementReferenceException, я пытался использовать Actions
, но это не сработало, и я не знаю о JavascriptExecutor
. Я также пробовал решения, размещенные на других вопросах SO, один из которых был моим по здесь. Я хотел бы исправить ошибку в приведенном ниже коде и получить рабочий код.
public class Selenium {
private final static String CHROME_DRIVER = "C:\\Selenium\\chromedriver\\chromedriver.exe";
private static WebDriver driver = null;
private static WebDriverWait wait = null;
private void setConnection() {
try {
System.setProperty("webdriver.chrome.driver", CHROME_DRIVER);
driver = ChromeDriver.class.newInstance();
wait = new WebDriverWait(driver, 5);
driver.get("https://sanctionssearch.ofac.treas.gov");
this.search();
} catch (Exception e) {
e.printStackTrace();
}
}
private void search() {
try {
driver.findElement(By.id("ctl00_MainContent_txtLastName")).sendKeys("Dawood");
driver.findElement(By.id("ctl00_MainContent_btnSearch")).click();
this.extractText();
} catch (Exception e) {
e.printStackTrace();
}
}
private void extractText() {
try {
List<WebElement> rows = driver.findElements(By.xpath("//*[@id='gvSearchResults']/tbody/tr"));
List<WebElement> links = null;
for (int i = 1; i <= rows.size(); i++) {
links = driver.findElements(By.xpath("//*[@id='gvSearchResults']/tbody/tr/td[1]/a"));
for (int j = 0; j < links.size(); j++) {
System.out.println(links.get(j).getText() + ", ");
links.get(j).click();
System.out.println("Afte click");
driver.findElement(By.id("ctl00_MainContent_btnBack")).click();
this.search();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] ar) {
Selenium object = new Selenium();
object.setConnection();
}
}
new ChromeDriver()
вместоChromeDriver.class.newInstance()
? К чему это отражение? - person M. Prokhorov   schedule 01.08.2017