Использование тега * против элемента - PullRequest
0 голосов
/ 18 сентября 2018

Я пишу скрипт для удаления некоторых данных из Интернета.

Я скопировал XPath для нескольких одинаковых элементов на разных страницах прямо из браузера, который выдает //*[@id="priceblock_dealprice"].

Однако это все span элементов. Я не знаю достаточно о том, как XPath работает под капотом, но я предполагаю, что //span[@id="priceblock_dealprice"], очевидно, будет быстрее, поскольку он должен только проверять элементы span? Это правда?

Есть ли польза от использования *, скажем, span в этом конкретном контексте?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Да, лучше использовать «span» вместо *, но поскольку у него есть идентификатор, поэтому вместо XPath лучше использовать By.ID. ID будет несколько быстрее по сравнению с Xpath.

0 голосов
/ 18 сентября 2018

Вы вряд ли увидите огромную разницу в производительности при изменении * на span.

Большее влияние на производительность устранит или, по крайней мере, ограничит нисходящую ось //.

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

Если вы предоставите какие-либо сведения о конструкции, двигатель сможет избежать ненужной работы и работать лучше.

Например:

/html/body/section[2]/div//*[@id="priceblock_dealprice"]

Помимо производительности, другие вопросы - это обслуживание и гибкость.

Вы можете получить более высокую производительность с более конкретным XPath, но тогда изменения структуры страницы и имен элементов могут привести к тому, что вещи больше не будут совпадать.Вам нужно будет решить, что важнее.

...