Синтаксис CSS великолепен по двум причинам:
- Это на порядок быстрее и требует меньше ресурсов, чем более сложный XPath.
- Когда то, что вы хотите найти, может быть найдено с помощью селектора css, соответствующий XPath-запрос, выполняющий то же самое, большую часть времени будет гораздо длиннее и труднее для чтения.
Показательный пример: возьмите этот селектор CSS: h1.header > a[rel~="author"]
Его кратчайший функциональный XPath эквивалент будет //h1[contains(" "+normalize-space(@class)+" "," header ")]/a[contains(" "+normalize-space(@rel)+" "," author ")]
… что гораздо сложнее читать и писать.
Если вы написали этот XPath вместо: //h1[@class="header"]/a[@rel="author"]
… вы бы неправильно пропустили разметку, как <h1 class="article header"><a rel="author external" href="/mike">...</a></h1>
Когда вам действительно нужен XPath, тем не менее, это единственный вариант, если вы не хотите обходить DOM вручную с помощью кода (который становится ужасно быстрым).
Лично (и я один из сопровождающих Greasemonkey), я использую очень крошечную библиотеку on.js
для всех моих потребностей по нарезке узлов - что дает мне комбинацию обоих XPath (когда я это нужно) и CSS (который я обычно использую почти все время) - в основном потому, что он позволяет мне отделить весь код, связанный с копанием частей страницы, которые мне нужно переварить, в заголовок скрипта, чтобы мой код получал обслуживал все, что ему нужно, и может быть связано с тем, чтобы на самом деле делать веселые или замечательные вещи для веб-страниц.
Веб-браузеры очень сильно оптимизированы для очень быстрого запуска javascript, и я бы порекомендовал использовать то, что делает вас наиболее эффективным и счастливым как разработчик, по сравнению с тем, что заставляет браузер выполнять наименьшее количество кода. В частности, одно из побочных преимуществ on.js
заключается в том, что он автоматически помогает сценариям вообще не запускаться вообще, на страницах, где узлы, о которых вы думали, что были рядом, оказываются не вместо того, чтобы уничтожать страницу.