2014-05-06 2 views
1

Problème assez basique en sélénium.Python/Selenium - find_elements_by_class_name avec un nom de classe long

Il y a une classe dans un site que je suis en train de parcourir (aucun ID, sans nom), mais très longue nom de classe tels que class="my really long crappy class name with space"

Je suis en train mydriver.find_elements_by_class_name(idClass);mydriver = webdriver.Firefox().

J'ai aussi essayé my.really.long.crappy.class.name.with.space et cela aussi ne fonctionne pas (vu cela comme une solution affichée sur d'autres questions comme moi. Quand je lance ce que je ne reçois pas une erreur, mais mon résultat est de taille zéro.

La fonction suivante est ce que je suis actuellement en utilisant, et je frappais mon impression

 def getElementByClass(idClass): 
      a=[]; 
      try: 
       print idClass; 
       a = mydriver.find_elements_by_class_name(idClass); 
       return a; 
      except: 
       print 'crap'; 
+0

Quelle valeur de 'idClass' passez-vous? – alecxe

+0

@alecxe J'ai essayé '' mon nom de classe très long merde avec espace "' et '' my.really.long.crappy.class.name.with.space "' –

Répondre

1

Vous pouvez utiliser find_elements_by_css_selector():

mydriver.find_elements_by_css_selector('.class1.class2.class3'); 

WHE re class1, class2 et class3 sont les noms de classe que l'élément a.

Ou, une autre option est d'utiliser find_elements_by_xpath():

mydriver.find_elements_by_xpath('//*[@class="my really long crappy class name with space"]') 

Vous pouvez également remplacer * avec le nom de la balise si vous le connaissez à l'avance.

Espérons que ça aide.

+0

Bien sûr. Pouvez-vous déballer ce que // * fait? –

+0

@jasonm signifie tout élément, n'importe quel nom de tag. Vous n'avez pas mentionné l'élément que vous recherchez. Si vous connaissez l'élément, remplacez simplement '*' par. Par exemple, '// div [...]'. – alecxe

Questions connexes