Элемент не найден при выполнении findElement в Selenium - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь заполнить несколько форм, которые следуют друг за другом, все формы заполняются быстро, без ошибок, потому что я обязательно добавлю

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("")));

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

В последней форме я сталкиваюсь с этой ошибкой:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: //*[@id="formtovalidate"]/fieldset[1]/div/label/input For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html

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

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

Я также пытался driver.navigate().refresh(), но это не сработало. Я продолжал искать и искать, но ничего не появилось. Я также изменил браузеры, которые ничего не делали ..

Этот метод я пытаюсь выполнить:

private void method() {

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"formtovalidate\"]/fieldset[1]/div/label/input")));
driver.findElement(By.xpath("//*[@id=\"formtovalidate\"]/fieldset[1]/div/label/input")).sendKeys(email); }

Обновление

Вот скриншот формы :

Вот результаты выполнения:

Код:

String body_text = driver.findElement(By.tagName("body")).getText();
System.out.println(body_text);

Результат: Форма, но в тексте

Код:

String body_innerHTML = driver.findElement(By.tagName("body")).getAttribute("innerHTML");
System.out.println(body_innerHTML);

Результат: Другая страница: (

<zendesk-ticketing-form base-url="https://www.runescape.com/a=870/c=K0aO9WO69EI" css-cachebust="129" sitekey="6Lcsv3oUAAAAAGFhlKrkRb029OHio098bbeyi_Hv" grecaptcha="" has-valid-session="true" weblogin-url="https://secure.runescape.com/m=weblogin/a=870/c=K0aO9WO69EI/loginform?mod=www&amp;ssl=1&amp;dest=zendesk/support-form?form=360000065898">
<div class="x-display-none ie-error-display" data-js-ie-error="">
    <section class="c-article">
        <div class="c-article__content">
            <h1>Error: Unsupported Browser</h1>
            <p>
                We do not support your web browser. Please use a supported web browser by choosing one below.
                <br>
                <a href="https://www.mozilla.org/firefox/" target="_blank" rel="noopener">FireFox</a>
                <br>
                <a href="https://www.google.com/chrome/" target="_blank" rel="noopener">Chrome</a>
            </p>
        </div>
    </section>
</div>

Код:

 String pagesource = driver.getPageSource();
        System.out.println(pagesource);

Результат: То же, что и предыдущий .. другая страница ..

Firefox Источник страницы: https://pastebin.com/Kv15V2SK

Firefox Проверка элемента скриншот страницы: http://prntscr.com/qvi6hc

Это странно, так как источник страницы отличается от формы!

Ответы [ 3 ]

1 голос
/ 01 февраля 2020

Я не мог найти время, чтобы решить вашу проблему. Если вы хотите сделать это самостоятельно, пожалуйста, поищите это в Google, «Shadow Root, Selenium», у меня раньше была такая ошибка. Я знаю, что вы не можете напрямую добраться до элемента, который находится внутри тени root, поэтому вы не получаете исходный код внутри него.

Что вам нужно сделать, это go шаг за шагом:

Вы должны расширить тень root,

Вот тень root Функция расширения:

public static WebElement expand_shadow_element(WebElement element)
    {
        WebElement shadow_root = (WebElement)((JavascriptExecutor)driver).executeScript("return arguments[0].shadowRoot", element);
        return shadow_root;
    }

Вы можете представить эта функция как

.switchTo.frame ()

на данный момент ..

После некоторых исследований вы поймете тень root.

Надеюсь, я правильно понял проблему ..

Попробуйте эту функцию. Если вы не можете, я помогу вам позже. Удачи.

0 голосов
/ 31 января 2020

Как и предполагали другие, похоже, веб-сайт RuneScape обнаружил, что вы используете бота для взаимодействия с их сайтом. Неважно, что вы решили капчу вручную, поскольку они все еще могут довольно легко обнаружить автоматическое поведение без нее (и нет, флаг navigator.webdriver не единственный способ обнаружить это).

Капча предназначен для предотвращения автоматического взаимодействия с их сайтом, что означает, что они не хотят, чтобы вы использовали Selenium / WebDriver для взаимодействия с ним. Вы должны уважать это, особенно если вам кажется, что вы хотите, чтобы ваша учетная запись была разблокирована (с использованием вставленных фрагментов и снимков экрана), поэтому попытка сделать то, чего они не хотят, не принесет вам пользы.

0 голосов
/ 31 января 2020

PageSource из тега <body>, содержащий ...

<zendesk-ticketing-form base-url="https://www.runescape.com/a=870/c=K0aO9WO69EI" css-cachebust="129" sitekey="6Lcsv3oUAAAAAGFhlKrkRb029OHio098bbeyi_Hv" grecaptcha="" has-valid-session="true" weblogin-url="https://secure.runescape.com/m=weblogin/a=870/c=K0aO9WO69EI/loginform?mod=www&amp;ssl=1&amp;dest=zendesk/support-form?form=360000065898">
<div class="x-display-none ie-error-display" data-js-ie-error="">
    <section class="c-article">
    <div class="c-article__content">
        <h1>Error: Unsupported Browser</h1>
        <p>
        We do not support your web browser. Please use a supported web browser by choosing one below.
        <br>
        <a href="https://www.mozilla.org/firefox/" target="_blank" rel="noopener">FireFox</a>
        <br>
        <a href="https://www.google.com/chrome/" target="_blank" rel="noopener">Chrome</a>
        </p>
    </div>
    </section>
</div>

... подразумевает, что WebDriver Управляемый Контекст просмотра был обнаружен как BOT , и навигация была заблокирована из-за присутствия reCAPTCHA .

Существуют различные подходы для решения / . Вы можете найти пару соответствующих обсуждений в:


Обновление

Из ваших комментариев теперь ясно, что вы хотите заполнить поля в форме:

form

На данный момент стоит упомянуть, что вы были перенаправлены на эту страницу по одной из следующих причин:

  • Вы EmailID / UserID is заблокирован / заблокирован доступ к сайту.
  • You EmailID / UserID занесен в черный список от доступа к сайту.

Поскольку вы использовали BOT для доступа / очистки сайта, который мог нарушить T & C.


Решение

Было бы сложно предложить решение для автоматического заполнения полей предположительно элементы на странице BAN APPEAL REQUEST могут быть защищены Invisible reCAPTCHA , и вам может потребоваться Программно вызвать вызов

...