Элемент не найден при выполнении findElement в Selenium

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

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 Inspect Element на скриншоте страницы: http://prntscr.com/qvi6hc

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

3 ответа

Решение

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

Что вам нужно сделать, так это шаг за шагом пройти элемент:

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

Вот функция расширения теневого корня:

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()

теперь..

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

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

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

Исходный текст из<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.

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


Обновить

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

форма

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

  • Вы EMAILID / Идентификатор_пользователь будет запрещен / заблокирован доступ к сайту.
  • Вы EMAILID / Идентификатор_пользователь является черным списком от доступа к сайту.

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


Решение

Было бы трудно предложить решение для автоматического fillup полей как предположительно элементов в REQUEST АПЕЛЛЯЦИОННОГО BAN страницы могут быть защищены невидимом рекапчи, и вы, возможно, придется программного вызова на вызов

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

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

Другие вопросы по тегам