XPath в RSelenium для индексации списка значений
Вот пример HTML:
<li class="index i1"
<ol id="rem">
<div class="bare">
<h3>
<a class="tlt mhead" href="https://www.myexample.com">
<li class="index i2"
<ol id="rem">
<div class="bare">
<h3>
<a class="tlt mhead" href="https://www.myexample2.com">
Я хотел бы взять значение каждого href в элементе. Что делает список, так это класс в первом li, в котором имя класса изменяется i1, i2. Поэтому у меня есть счетчик, и я меняю его, когда беру значение.
i <- 1
stablestr <- "index "
myVal <- paste(stablestr , i, sep="")
так что даже если попытаться просто получить доступ к общей библиотеке с помощью индекса myVal, используя эту
profile<-remDr$findElement(using = 'xpath', "//*/input[@li = myVal]")
profile$highlightElement()
или HREF, используя это
profile<-remDr$findElement(using = 'xpath', "/li[@class=myVal]/ol[@id='rem']/div[@id='bare']/h3/a[@class='tlt']")
profile$highlightElement()
Что-то не так с xpath?
1 ответ
Ваша HTML структура недействительна. Ваш <li>
теги не закрыты должным образом, и кажется, что вы путаете <ol>
с <li>
, Но ради вопроса, я предполагаю, что структура, как вы пишете, с правильно закрытым <li>
теги.
Затем, построив myVal
не является правильным. Это даст "index 1"
пока ты хочешь "index i1"
, использование "index i"
за stablestr
,
Теперь для XPath:
//*/input[@li = myVal]
Это явно неправильно, так как нет input
в вашем XML. Кроме того, вы не указали префикс переменной $
, И, наконец, *
кажется ненужным. Попробуй это:
//li[@class = $myVal]
В вашем втором XPath также есть некоторые ошибки:
/li[@class=myVal]/ol[@id='rem']/div[@id='bare']/h3/a[@class='tlt']
^ ^ ^
missing $ should be @class is actually 'tlt mhead'
Первые две проблемы легко исправить. Третий нет. Вы могли бы использовать contains(@class, 'tlt')
, но это также будет соответствовать, если класс, например, tltt
что, вероятно, не то, что вы хотите. В любом случае, этого может быть достаточно для вашего варианта использования. Исправлена XPath:
/li[@class=$myVal]/ol[@id='rem']/div[@class='bare']/h3/a[contains(@class, 'tlt')]