Как поймать динамический c xpath id в Rselenium R - PullRequest
1 голос
/ 03 марта 2020

У меня проблема с одним динамиком c xpath Я пытался использовать другой способ решения проблемы, но пока не нашел хорошего решения.

Проблема в том, что мне нужно использовать xpath, который, к сожалению, является динамическим c и не имеет такой же длины.

Здесь часть кода html, которая генерирует щелчок

   <div class="field">
        <a onclick="sendGaSearch();" class="ui button rounded" style="background- 
 color: #3fa9f5;" id="id1a2" href="javascript:;">

В в этом случае идентификатор равен "id1a2", но если я обновлю sh страницу, код будет другим.

Я нахожу это решение, но не всегда работает, потому что длина id="id1a2" будет другой.

Мое решение:

  cod_html<-webElem$getPageSource()
  x<-str_match(cod_html, ".^*ui button rounded ([^\\.]*)\\..*")[,2]
  cod_c<-str_sub(x, 42,47)
  cod_c2<-paste0("//*[@id=",'"', cod_c,'"',"]")
  webElem <- remote_driver$findElement(using = "xpath",cod_c2)
  webElem$clickElement()

Часть кода html, которую я извлекаю из страницы, такова:

 "\" style=\"background-color: #3fa9f5;\" id=\"id1a2\"
 href=\"javascript:;\">\n\t\t\t\t\t\t\tSearch\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\n\t\t\t\t</form>\n\t\t\t\t\n\t\t\t\t<script

Кто-нибудь может помочь мне решить это.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Я решил проблему таким образом.

  cod_html<-webElem$getPageSource()
  x<-str_extract (string = cod_html, pattern = ("(?<=;\" id=\").*(?=\" href=\"javascript)"))
  cod_c2<-paste0("#",x)
  webElem <- remote_driver$findElement(using = "css selector",value = cod_c2)
  webElem$clickElement()

Таким образом, я могу поймать значение Dynami c различной длины.

1 голос
/ 03 марта 2020

Зачем создавать селектор на основе динамического c атрибута?

Вы должны всегда использовать значения из атрибутов, которые не меняются и, если возможно, со значимым текстом, а не чем-то слишком общим, в этом случае:

 //a[@onclick='sendGaSearch()']

Или css: a[href*=sendGaSearch]

...