Получить все ссылки href с использованием селена в python

Я практикую Selenium в Python, и я хотел получить все ссылки на веб-странице, используя Selenium.

Например, мне нужны все ссылки в свойстве href= всех тегов <a> на http://psychoticelites.com/

Я написал сценарий, и он работает. Но это дает мне адрес объекта. Я пытался использовать тег id для получения значения, но он не работает.

Мой текущий сценарий:

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)

Ответ 1

Ну, вы должны просто пройтись по списку:

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

find_elements_by_* возвращает список элементов (обратите внимание на написание "элементов"). Просмотрите список, возьмите каждый элемент и извлеките из него требуемое значение атрибута (в данном случае href).

Ответ 2

Вы можете импортировать HTML dom с помощью библиотеки html dom в python. Вы можете найти его здесь и установить с помощью PIP:

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

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

Вышеприведенный код создает объект HtmlDom. HtmlDom принимает параметр по умолчанию, url страницы. Когда объект dom создается, вам нужно вызвать метод createDom HtmlDom. Это проанализирует данные html и построит дерево разбора, которое затем может быть использовано для поиска и обработки данных html. Единственное ограничение, накладываемое библиотекой, заключается в том, что данные, будь то html или xml, должны иметь корневой элемент.

Вы можете запросить элементы, используя метод "find" объекта HtmlDom:

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

В приведенном выше коде будут напечатаны все ссылки/URL-адреса, присутствующие на веб-странице.

Ответ 3

Вы можете попробовать что-то вроде:

    links = driver.find_elements_by_partial_link_text('')

Ответ 4

import requests
from selenium import webdriver
import bs4
driver = webdriver.Chrome(r'C:\chromedrivers\chromedriver') #enter the path
data=requests.request('get','https://google.co.in/') #any website
s=bs4.BeautifulSoup(data.text,'html.parser')
for link in s.findAll('a'):
    print(link)