Получить все ссылки 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)