Почему никакие элементы не могут быть затронуты на этом сайте? - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь использовать селен для ввода данных в поля ввода.Но я не могу получить какой-либо элемент (NoSuchElementException).Проблема только с этим сайтом .

Я попытался выполнить поиск по имени / идентификатору, но это не удалось.

WebDriver driver = new FirefoxDriver();        
driver.get("https://ekrs.ms.gov.pl/web/wyszukiwarka-krs/strona-glowna");
System.out.println(driver.getCurrentUrl());
System.out.println("Successfully opened the website");
WebElement wb = driver.findElement(By.id("rejestrPrzedsiebiorcy"));

Моя цель (на данный момент) состоит в том, чтобы просто получить этот элемент: P.

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

Проблема в том, что форма включена в источник через элемент <iframe>.Вы можете видеть, что у него есть атрибут src="https://ekrs.ms.gov.pl/krsrdf/krs/wyszukiwaniepodmiotu?".Если вы перейдете по этой ссылке, вы увидите автономную форму.Вопрос - как получить доступ к включенному источнику?Это довольно просто;)

  1. Найдите элемент <iframe>:

    WebElement frame = driver.findElement(By.xpath("//div[@class='portlet-body']/div/iframe"))

  2. Переключитесь на этот кадр:

    driver.switchTo().frame(frame)

И все!Теперь вы находитесь в контексте элемента <iframe> и можете искать внутри него.теперь это будет работать:

WebElement wb = driver.findElement(By.id("rejestrPrzedsiebiorcy"));

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

driver.switchTo().defaultContent();

Обратите внимание, что на этом сайте динамически генерируются идентификаторы дляпредотвратить автоматизацию и использует CaptchaV3 (вы можете видеть, что я использовал выражение xpath, чтобы найти iframe).Селен легко обнаружить, если вы не будете осторожны.

0 голосов
/ 29 декабря 2018

Внимательно соблюдайте HTML-код после проверки необходимого элемента.Если ваш элемент находится внутри <iframe>, вам нужно сначала включить фрейм, а затем найти этот элемент.

ниже - способ перехода к фрейму:

driver.switchTo().frame() метод занимает одиниз трех возможных аргументов:

Число.

Выберите кадр по его (основанному на нуле) индексу.То есть, если страница имеет три кадра, первый кадр будет с индексом 0, второй с индексом 1 и третий с индексом 2. После выбора кадра все последующие вызовы интерфейса WebDriver будут выполнены для этого кадра..

driver.switchTo().frame(0)

Имя или идентификатор.

Выберите кадр по имени или идентификатору.Фреймы, расположенные по совпадающим атрибутам имени, всегда имеют приоритет над теми, которые совпадают с ID.

driver.switchTo().frame("name here");

Ранее найденный WebElement.

Выберите фрейм, используя ранее расположенный WebElement.

    WebElement iframeElement = driver.findElement(By.id("IF1"));

    //now use the switch command
    driver.switchTo().frame(iframeElement);
0 голосов
/ 29 декабря 2018

Сначала попробуйте driver.findElement(By.id("form-main"));, затем driver.findElement(By.id("rejestrPrzedsiebiorcy"));.

...