Как сделать программу, которая перебирает все сохраненные фотографии в Instagram - PullRequest
0 голосов
/ 09 февраля 2019

Я нахожусь в процессе создания программы для сохранения фотографий Instagram из области "Сохраненные" страницы.Есть 2 элемента:

  • " шевроны ", которые позволяют переключать фотографии в нескольких публикациях;
  • стрелка вправо ", которые позволяют перейти к следующей публикации.

enter image description here

Я хочу создать программу, которая будет обрабатывать все сохраненные фотографии. Еслиесть шеврон, программа должна проходить по всем фотографиям внутри этой публикации нескольких фотографий ( нажмите на шервор, когда она доступна ). Если шеврона нет, когда программа должна перейти к следующей сохраненной фотографии ( нажмите на следующую стрелку ).

Мой вопрос таков: как написать пропозициональное «предложение IF» для 1) сначала выполнить цикл внутри многократной публикации и 2) затем (когдавсе фотографии в мультипабе будут закончены) перейдите к следующей публикации.

Пока у меня есть следующий код:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import java.util.List;

public class TestSelenium {
    public static void main(String[] args){
        WebElement img;
        String src;
        int i =0;

// Set webdriver option
        System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\Webdrivers\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.instagram.com/accounts/login/");
// Set waits
        WebDriverWait wait = new WebDriverWait(driver, 5);

// Write down the login
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[name='username']"))).sendKeys("%%MY_INSTA_LOGGIN%%");
// Write down the password
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[name='password']"))).sendKeys("%%MY_INSTA_PASSWORD%%");
// Click on the Signin button
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button[type='submit']"))).click();

// Go to the saved page
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[class='SKguc']"))).click();
        driver.get("https://www.instagram.com/aleksandrqa/saved/");

// Click on the first element
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[class='eLAPa']"))).click();

            // Click on the next chevron
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("a[class='SWk3c  Zk-Zb coreSpriteRightChevron']"))).click();

            // Click on the next arrow
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("a[class='HBoOv coreSpriteRightPaginationArrow']"))).click();

// TODO
// Save all photos URLs

    }
}

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете определить следующее изображение > стрелка, используя приведенный ниже xpath:

String xpath = "//div[contains(@class, 'RightChevron')]";

Если вы перейдете к последнему изображению, указанный выше xpath не вернет никаких совпадений, потому что это изображение > стрелкаотсутствует для последнего / единственного изображения.

Чтобы проверить, присутствует ли локатор без обработки каких-либо исключений, вы можете использовать метод findElements(), как показано ниже:

List<WebElement> imageArrow = driver.findElements(By.xpath(xpath));
if(imageArrow.size() > 0) {
    System.out.println("=> The image arrow is present...");
    // Perform some action here
} else {
    System.out.println("=> The image arrow is not present...");
}

Если размер списка больше нуля, тогда есть стрелка, иначе нет, поэтому приведенный ниже код будет циклически проходить, пока размер не станет больше нуля, и щелкнет стрелку изображения.

boolean isThereAnArrow = true;
while(isThereAnArrow) {
    final String xpath = "//div[contains(@class, 'RightChevron')]";
    List<WebElement> imageArrow = driver.findElements(By.xpath(xpath));
    if(imageArrow.size() > 0) {
        System.out.println("=> The image arrow is present...");
        imageArrow.get(0).click(); // Clicking on the image arrow
    } else {
        System.out.println("=> The image arrow is not present...");
        isThereAnArrow = false; // If there is no match then it will help us to break the loop
    }

}

То же, что и выше, вы можете проверить наличие следующих сообщений > стрелка.Ниже приведен весь код, который нажимает на стрелку >, если она присутствует, или нажимает кнопку следующего сообщения, пока не появятся сообщения.

boolean isThereNextPostArrow = true;
while(isThereNextPostArrow) {
    // Checks for the next '>' image arrow, if not then will break the loop
    // ---------------------------------------------------------------------------
    boolean isThereAnArrow = true;
    while(isThereAnArrow) {
        final String xpath = "//div[contains(@class, 'RightChevron')]";
        List<WebElement> imageArrow = driver.findElements(By.xpath(xpath));
        if(imageArrow.size() > 0) {
            System.out.println("=> The image arrow is present...");

            // Do something here

            imageArrow.get(0).click(); // Clicking on the image arrow
        } else {
            System.out.println("=> The image arrow is not present...");
            isThereAnArrow = false; // If there is no match then it will help us to break the loop
        }
    }
    // ---------------------------------------------------------------------------
    // Checks for the next '>' post arrow, if not then will break the loop
    List<WebElement> nextPost = driver.findElements(By.xpath("//a[contains(@class, 'PaginationArrow')]"));
    if(nextPost.size() > 0) {
        System.out.println("=> The next post arrow is there...");
        nextPost.get(0).click(); // Clicking on the next post
    } else {
        System.out.println("=> The next post arrow is not there...");
        isThereNextPostArrow = false; // If there is no match then it will help us to break the outer loop
    }
}

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...