web-dev-qa-db-fra.com

Récupère tous les liens href en utilisant Selenium en python

Je pratique Selenium en python et je voulais récupérer tous les liens sur une page Web en utilisant Selenium.

Par exemple, je veux tous les liens du tag "a href" de ce site: http://psychoticelites.com/

J'ai écrit un script et ça marche. Mais, c'est plutôt me donner l'adresse de l'objet. J'ai essayé d'utiliser la balise 'id' pour obtenir la valeur, mais cela ne fonctionne pas.

Mon script actuel: -

from Selenium import webdriver
from Selenium.webdriver.common.keys import Keys



driver = webdriver.Firefox()
driver.get("http://psychoticelites.com/")
assert "Psychotic" in driver.title
continue_link = driver.find_element_by_tag_name('a')
elem = driver.find_elements_by_xpath("//*[@href]")
#x = str(continue_link)
#print continue_link
#print elem
z = elem
print z

Tout type d'indice/indice serait apprécié.

14
Xonshiz

Eh bien, vous devez simplement parcourir la liste en boucle. 

elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
    print elem.get_attribute("href")

find_elements_by_* renvoie une liste d'éléments (notez l'orthographe de 'éléments'). Parcourez la liste, prenez chaque élément et récupérez la valeur d'attribut souhaitée. (dans ce cas, href)

29
JRodDynamite

Vous pouvez essayer quelque chose comme:

    links = driver.find_elements_by_partial_link_text('')
1
Shawn

Vous pouvez importer le dom HTML à l'aide de la bibliothèque html dom en python. Vous pouvez le trouver ici et l'installer à l'aide de PIP:

https://pypi.python.org/pypi/htmldom/2.0

from htmldom import htmldom
dom = htmldom.HtmlDom("https://www.github.com/")  
dom = dom.createDom()

Le code ci-dessus crée un objet HtmlDom. Le HtmlDom prend un paramètre par défaut, l'URL de la page. Une fois que l'objet dom est créé, vous devez appeler la méthode "createDom" de HtmlDom. Cela analysera les données html et construira l’arbre d’analyse qui pourra ensuite être utilisé pour rechercher et manipuler les données html. La seule restriction imposée par la bibliothèque est que les données, qu'il s'agisse de HTML ou de XML, doivent avoir un élément racine.

Vous pouvez interroger les éléments en utilisant la méthode "find" de l'objet HtmlDom:

p_links = dom.find("a")  
for link in p_links:
  print ("URL: " +link.attr("href"))

Le code ci-dessus imprimera tous les liens/URL présents sur la page Web.

1
Python_Novice