如何在Rselenium R中捕获动态xpath id

问题描述 投票:0回答:2

我对一个动态xpath有问题我尝试使用其他方法来解决问题,但是,我还没有找到一个很好的解决方案。

问题是,我不得不使用一个xpath,不幸的是,它是动态的并且它的长度从来没有相同。

这里是产生点击的html代码的一部分

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

在这种情况下,id为"id1a2",但是如果刷新页面,代码将不同。

我找到了这个解决方案,但并不总是有效,因为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

有人可以帮助我解决这个问题。

先谢谢您。

r xpath rselenium
2个回答
1
投票

为什么要基于动态属性创建选择器?

您应该始终使用不变的属性中的值,如果可能的话,使用有意义的文本,并且不要太笼统,在这种情况下:

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

或CSS:a[href*=sendGaSearch]


0
投票

我以这种方式解决了问题。

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

通过这种方式,我可以毫无问题地捕获动态值。

© www.soinside.com 2019 - 2024. All rights reserved.