我对一个动态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
有人可以帮助我解决这个问题。
先谢谢您。
为什么要基于动态属性创建选择器?
您应该始终使用不变的属性中的值,如果可能的话,使用有意义的文本,并且不要太笼统,在这种情况下:
//a[@onclick='sendGaSearch()']
或CSS:a[href*=sendGaSearch]
我以这种方式解决了问题。
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()
通过这种方式,我可以毫无问题地捕获动态值。