2017-02-23 1 views
0

J'ai regardé partout pour cela mais je n'arrive pas à trouver la réponse sur la façon de sélectionner des éléments avec un attribut de classe vide dans l'enchaînement web de Ruby Nokogiri?dans Nokogiri comment choisir un élément avec un attribut de classe vide?

Dans css la réponse semble assez simple mais dans nokogiri, je n'ai pas été en mesure de trouver la réponse. Ci-dessous un exemple de HTML que je voudrais cibler l'aide nokogiri:

<td class=""> 

Répondre

0

La syntaxe sélecteur DOM va plus loin que les noms d'éléments, des classes et ids. Vous pouvez également faire correspondre certaines valeurs d'attribut, et class est juste un autre attribut.

Pour sélectionner tous les td où la classe est une chaîne vide:

"td[class='']" 

Notez que ceci est différent de la sélection td que DonT ont un attribut de classe défini. Dans ce cas, vous pouvez utiliser:

"td:not([class])" 

Il semble que le HTML ne vous appartient pas, cependant, donc je prendrais une approche différente. Si vous utilisez Chrome, recherchez l'élément dans l'arborescence HTML de l'inspecteur de navigateur, cliquez avec le bouton droit de la souris et cliquez sur copier => sélecteur. Puis collez; vous avez un sélecteur unique pour accéder à l'élément.

Ceci est rendu encore plus compliqué, par le fait que Nokogiri n'exécute pas Javacript. Donc, vous n'avez aucune garantie que le DOM dans l'inspecteur du navigateur est le même que celui référencé par Nokogiri. Dans ce cas, vous devez regarder la source de la page d'origine et voir si la structure est la même. Dans l'ensemble, vous aurez le temps le plus facile de racler les pages d'autres personnes si vous utilisez un navigateur automatisé comme Selenium qui peut exécuter JS.

1
# encoding: UTF-8 
require 'nokogiri' 

web = '<a class="ok">selected</a>' 


p Nokogiri::HTML(web).xpath('//a[@class="ok"]').text 
#=> selected 

web = '<a class="">selected</a>' 


p Nokogiri::HTML(web).xpath('//a[@class=""]').text 
#=> selected 

Je peux sélectionner des éléments de classe vides de cette façon, peut-être vous pouvez l'essayer, vérifiez-vous que vous avez d'autres erreurs de syntaxe?