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')]
Другие вопросы по тегам