Я изменил свой скрипт, и теперь он работает гладко и нормально.
Что я сделал, благодаря поддержке SO.
Откройте URL как www. my.url
Откройте все 20 ссылок по одной и сохраните имена
Но, что я заметил, это www.my.urlимеет 20 страниц (нумерация страниц). Итак, текущий способ работы скрипта работает только для 1-й пагинации. Мой код здесь
public class GetAllLinks {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "C://Dell//chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://www.reklama.lv/ru/manufacture/build-works/uslugi/table.html");
driver.manage().window().maximize();
//Get list of web-elements with tagName - a
driver.findElement(By.xpath("//em[@class='view1']")).click();
List<WebElement> demovar = driver.findElements(By.xpath("//*[@id=\"big_icon_view\"]/ul/li/p/a"));
System.out.println(demovar.size());
ArrayList<String> hrefs = new ArrayList<String>(); //List for storing all href values for 'a' tag
for (WebElement var : demovar) {
System.out.println(var.getText()); // used to get text present between the anchor tags
System.out.println(var.getAttribute("href"));
hrefs.add(var.getAttribute("href"));
}
int i = 0;
for (String href : hrefs) {
driver.navigate().to(href);
boolean isPresent = driver.findElements(By.xpath("//h3[@id='NameTitle']")).size() > 0;
if (isPresent) {
String test = driver.findElement(By.xpath("//*[@id=\"NameLink\"]")).getText();
System.out.println(test);
} else {
System.out.println("No name found");
}
Thread.sleep(3000); // To check if the navigation is happening properly.
}
}
}
Как я упоминал ранее, он будет анализировать все ссылки, которые видны на 1-й странице. Но мне также нужно реализовать нумерацию страниц.
Итак, я попытался добавить сюда нумерацию страниц
for (WebElement var : demovar) {
System.out.println(var.getText()); // used to get text present between the anchor tags
System.out.println(var.getAttribute("href"));
hrefs.add(var.getAttribute("href"));
}
и добавлял что-то вроде
if(driver.findElement(By.xpath("//paginationButton")).isDisplayed() {
driver.findElement(By.xpath("//paginationButton")).click();
System.out.println(var.getText()); // used to get text present between the anchor tags
System.out.println(var.getAttribute("href"));
hrefs.add(var.getAttribute("href"));
} else {
System.outprintln("no more pagination button");
}
Предполагая, чтоНа второй странице скрипт проверит остальные 20 ссылок и откроет их одну за другой. Но, к сожалению, здесь я терплю неудачу.