Разбор ссылок, если существует нумерация страниц, с помощью Selenium - PullRequest
0 голосов
/ 11 ноября 2019

Я изменил свой скрипт, и теперь он работает гладко и нормально.

Что я сделал, благодаря поддержке SO.

  1. Откройте URL как www. my.url

  2. Откройте все 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 ссылок и откроет их одну за другой. Но, к сожалению, здесь я терплю неудачу.

1 Ответ

0 голосов
/ 11 ноября 2019

Поскольку вы используете нумерацию страниц, после перехода на страницу 2 вам необходимо снова использовать метод findElements. И добавьте hrefs.

Как после окончания последнего цикла for:

    demovar = driver.findElements(By.xpath("//*[@id=\"big_icon_view\"]/ul/li/p/a"));

    hrefs.clear();
    for (WebElement var : demovar) {
        hrefs.add(var.getAttribute("href"));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...