Как использовать селен на странице, которая никогда не загружается полностью? - PullRequest
1 голос
/ 02 марта 2020

Я пытался получить некоторые элементы с этой страницы: https://www.humblebundle.com/store/shadowgrounds-survivor, чтобы я мог что-то с ними сделать. Когда я проверял страницу из Chrome или Firefox, я получал каждый элемент на странице, или, по крайней мере, я так думал, но при попытке найти элемент с селеном это просто не получалось.

Я понял, что страница загружается вечно, поэтому мне нужно знать, есть ли какой-нибудь способ сделать что-то с селеном, даже если страница загружена не полностью.

Это мой код:

public static void main(String[] args) throws IOException, InterruptedException {
    System.setProperty("webdriver.gecko.driver", "C:\\WebDriver\\bin\\geckodriver.exe");
    DesiredCapabilities capabilities = DesiredCapabilities.firefox();
    capabilities.setCapability("marionette", true);
    WebDriver driver = new FirefoxDriver(capabilities);

    try {
        driver.get("https://www.humblebundle.com/store/shadowgrounds-survivor");
        WebElement listElement1 = driver.findElement(By.tagName(".current-price"));

    } finally {
        driver.close();
    }
}

Я получаю NoSuchElementException от селена.

Ответы [ 2 ]

0 голосов
/ 02 марта 2020
  1. Нет необходимости устанавливать возможности ("marionette", true) причина здесь
  2. Селектор неправильный By.tagName(".current-price"). Это имя класса, а не имя тега, поэтому используйте className селектор driver.findElement(By.className(".current-price"))
  3. Когда вы открываете ссылку, которой вы поделились, она запрашивает подтверждение возраста, как показано ниже. Поэтому вам нужно сначала обработать этот

enter image description here

Введите Implicit или Explicit сценарий ожидания для управления временем ожидания в ваших сценариях

Так что теперь ваш код становится:

public static void main(String[] args) throws IOException, InterruptedException {
    System.setProperty("webdriver.gecko.driver", "C:\\WebDriver\\bin\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    driver.get("https://www.humblebundle.com/store/shadowgrounds-survivor");
    // handle age confirmation on above suggested page
    WebDriverWait wait = new WebDriverWait(driver,30);
    wait.until(ExpectedConditions.presenceOfElementLocated(By.className(".current-price")));
    driver.get("https://www.humblebundle.com/store/shadowgrounds-survivor");
    WebElement listElement1 = driver.findElement(By.className(".current-price"));
    System.out.println(listElement1.getText());
    driver.close();
}
0 голосов
/ 02 марта 2020

Вы можете использовать команды ожидания Selenium, где вы можете ожидать интервал времени для загрузки страницы.

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...