Selenium XPath для жирного <b></b> тег - PullRequest
0 голосов
/ 07 октября 2019

Ниже приведен HTML-код, содержащий теги b (жирный), для которых я хочу получить XPath.

    <tbody>
      <tr>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">..</td>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
          <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>Xyz</B></DIV>">
            <b>Xyz</b>
          </div>
        </td>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
          <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>01/01/2019</B></DIV>">
            <b>01/01/2019</b>
          </div>
        </td>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">..</td>
        <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
          <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>Abc</B></DIV>">
            <b>Abc</b>
          </div>
        </td>
      </tr>
    </tbody>

Я придумал этот xpath: //div[@class='get-HTML']/b, но есть много других тегов b.

Например, если мне нужно прочитать текст по тегу ниже, как мне быть точным?

<td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
    <div class="get-HTML" __listner="<DIV class=gwt-HTML><B>01/01/2019</B></DIV>">
        <b>01/01/2019</b>
    </div>`

Попробовал этот xpath, но он не работал:

//div[@class='get-HTML']/b[2]

Можете ли вы помочь мне взломать этот xpath?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Поскольку дерево HTML идентично всем элементам b, то есть tr/td/div/b всегда будет извлекать 3 различных элемента b, вам потребуется использовать индекс для доступа к нужному элементу.

В зависимости от тега b, который вы хотите получить, вам нужно будет использовать индекс элементов td для получения тега, поскольку на одном уровне несколько элементов td:

//tr/td[index]/div/b

Применяя этот пример, мы можем получить b теги как таковые:

Чтобы получить Xyz: //tr/td[2]/div/b

Чтобы получить 01/01/2019: //tr/td[3]/div/b

Чтобы получить abc: //tr/td[5]/div/b

В качестве альтернативы, если вы хотите получить тег b на основе его текста, путь будет другим:

//b[text()='xyz']

Однакоэто даст вам только один элемент b, и вы должны знать его текст заранее, поэтому такой подход нежелателен, если вы не знаете текст внутри элементов b.

0 голосов
/ 07 октября 2019

Если вы хотите быть по-настоящему конкретным, включите в свой XPath больше родительских элементов.

Простой способ всегда получить правильный XPath: используйте Google Chrome Inspector> Выбрать элемент> Щелкните правой кнопкой мыши тег HTML> Копировать> XPath

В этом случае:

<tbody>
    <tr>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">..</td>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
        <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>Xyz</B></DIV>">
          <b>Xyz</b>
        </div>
      </td>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
        <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>01/01/2019</B></DIV>">
          <b>01/01/2019</b>
        </div>
      </td>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">..</td>
      <td align="left" style="VERTICAL-ALIGN: top" rowSpan="1" colSpan="1">
        <div class="get-HTML" __listner=" <DIV class=gwt-HTML><B>Abc</B></DIV>">
          <b>Abc</b>
        </div>
      </td>
    </tr>
  </tbody>

XPath для третьего тега b: /html/body/div[3]/b

В вашем случае, возможно, вам нужно удалить /html/body/, возможноне. Это зависит от того, в каких родительских элементах находится ваш HTML-код.

Примечание: поэтому XPath изменяется, когда вы используете разные родительские элементы, если вы используете этот точный метод. Например: это может быть сложнее реализовать на динамически генерируемых страницах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...