Получить ‘href’ значение в selenium
Всем привет! Пишу программу и столкнулся с проблемой. Облазил везде чтобы решить ее, но так и не понял как правильно получить значение ‘href’ в Selenium. Если что мне надо несколько таких же кодов спарсить с одной страницы. Вот фрагмент кода страницы который нужно спарсить:
А вот код который я написал в python:
posts = driver.find_elements_by_xpath('//a[contains(@href,"href")]') print(posts)
Выбивает ошибку. В основном из-за — list. Но я уже пытался писать
for post in posts: print(posts)
Все равно не помогает. Хочу увидеть что вы думаете Спасибо!
Как получить href с помощью Selenium в Python?
Для получения значения атрибута href с использованием Selenium и Python, вы можете использовать метод get_attribute().
from selenium import webdriver driver = webdriver.Chrome("путь_к_драйверу") driver.get("ваш_url") element = driver.find_element_by_id("id_элемента") href_value = element.get_attribute("href") print(href_value)
Детальный ответ
Как получить href с помощью Selenium и Python
В этой статье мы рассмотрим, как получить значение атрибута href с использованием Selenium и Python. Для работы с Selenium у вас должен быть установлен Python и соответствующий WebDriver для вашего браузера.
Шаг 1: Установка Selenium и WebDriver
Первым шагом необходимо установить Selenium и WebDriver для вашего браузера. Вы можете использовать следующую команду для установки Selenium:
pip install selenium
Затем вам необходимо загрузить WebDriver для вашего браузера. WebDriver — это программа, которая управляет вашим браузером во время автоматического тестирования. Вы можете найти WebDriver для вашего браузера, посетив официальный сайт Selenium WebDriver.
Шаг 2: Импорт библиотек и настройка WebDriver
После установки Selenium и WebDriver вам нужно импортировать необходимые библиотеки и настроить WebDriver для вашего браузера. Вот пример кода:
from selenium import webdriver # Установка пути до WebDriver для вашего браузера (в данном случае Chrome) driver_path = "/path/to/chromedriver" driver = webdriver.Chrome(driver_path)
Шаг 3: Открытие веб-страницы и получение href
Теперь, когда у вас есть настроенный WebDriver, вы можете открыть веб-страницу и получить значение атрибута href. Вот пример кода:
url = "https://www.example.com" driver.get(url) # Находим элемент на странице по селектору CSS element = driver.find_element_by_css_selector("a") # Получаем значение атрибута href href_value = element.get_attribute("href") print("Значение href:", href_value)
Шаг 4: Закрытие WebDriver
Не забудьте закрыть WebDriver после завершения работы с ним:
driver.quit()
Заключение
В этой статье мы рассмотрели, как получить значение атрибута href с помощью Selenium и Python. Мы установили Selenium, настроили WebDriver, открыли веб-страницу, нашли элемент и получили значение атрибута href. Используйте эти шаги в своих проектах, чтобы получить href и выполнить различные действия с элементами на веб-страницах. Надеюсь, этот материал был полезен для вас! Успехов в изучении Selenium с помощью Python!
Как получить href с помощью Selenium в Python?
Для получения значения атрибута href с использованием Selenium и Python, вы можете использовать метод get_attribute().
from selenium import webdriver driver = webdriver.Chrome("путь_к_драйверу") driver.get("ваш_url") element = driver.find_element_by_id("id_элемента") href_value = element.get_attribute("href") print(href_value)
Детальный ответ
Как получить href с помощью Selenium и Python
В этой статье мы рассмотрим, как получить значение атрибута href с использованием Selenium и Python. Для работы с Selenium у вас должен быть установлен Python и соответствующий WebDriver для вашего браузера.
Шаг 1: Установка Selenium и WebDriver
Первым шагом необходимо установить Selenium и WebDriver для вашего браузера. Вы можете использовать следующую команду для установки Selenium:
pip install selenium
Затем вам необходимо загрузить WebDriver для вашего браузера. WebDriver — это программа, которая управляет вашим браузером во время автоматического тестирования. Вы можете найти WebDriver для вашего браузера, посетив официальный сайт Selenium WebDriver.
Шаг 2: Импорт библиотек и настройка WebDriver
После установки Selenium и WebDriver вам нужно импортировать необходимые библиотеки и настроить WebDriver для вашего браузера. Вот пример кода:
from selenium import webdriver # Установка пути до WebDriver для вашего браузера (в данном случае Chrome) driver_path = "/path/to/chromedriver" driver = webdriver.Chrome(driver_path)
Шаг 3: Открытие веб-страницы и получение href
Теперь, когда у вас есть настроенный WebDriver, вы можете открыть веб-страницу и получить значение атрибута href. Вот пример кода:
url = "https://www.example.com" driver.get(url) # Находим элемент на странице по селектору CSS element = driver.find_element_by_css_selector("a") # Получаем значение атрибута href href_value = element.get_attribute("href") print("Значение href:", href_value)
Шаг 4: Закрытие WebDriver
Не забудьте закрыть WebDriver после завершения работы с ним:
driver.quit()
Заключение
В этой статье мы рассмотрели, как получить значение атрибута href с помощью Selenium и Python. Мы установили Selenium, настроили WebDriver, открыли веб-страницу, нашли элемент и получили значение атрибута href. Используйте эти шаги в своих проектах, чтобы получить href и выполнить различные действия с элементами на веб-страницах. Надеюсь, этот материал был полезен для вас! Успехов в изучении Selenium с помощью Python!
Python Selenium — get href value
I’ve tried driver.find_elements_by_css_selector(«.sc-eYdvao.kvdWiq»).get_attribute(«href») but it returned ‘list’ object has no attribute ‘get_attribute’ . Using driver.find_element_by_css_selector(«.sc-eYdvao.kvdWiq»).get_attribute(«href») returned None . But i cant use xpath because the website has like 20+ href which i need to copy all. Using xpath would only copy one. If it helps, all the 20+ href are categorised under the same class which is sc-eYdvao kvdWiq . Ultimately i would want to copy all the 20+ href and export them out to a csv file. Appreciate any help possible.
190k 43 43 gold badges 292 292 silver badges 364 364 bronze badges
asked Feb 25, 2019 at 8:48
845 3 3 gold badges 8 8 silver badges 14 14 bronze badges
Update the question with a bit more of the outerHTML
Feb 25, 2019 at 9:09
Can you also include the url?
Feb 25, 2019 at 9:17
6 Answers 6
You want driver.find_elements if more than one element. This will return a list. For the css selector you want to ensure you are selecting for those classes that have a child href
elems = driver.find_elements_by_css_selector(".sc-eYdvao.kvdWiq [href]") links = [elem.get_attribute('href') for elem in elems]
You might also need a wait condition for presence of all elements located by css selector.
elems = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".sc-eYdvao.kvdWiq [href]")))
answered Feb 25, 2019 at 9:20
84k 14 14 gold badges 56 56 silver badges 103 103 bronze badges
There’s a typo in the wait condition: it should be WebDriverWait(driver,10).until . [with a closing bracket between ’10’ and ‘.until’).
Jan 11, 2021 at 11:03
Thank you worked beautifully also for my case although I am using find_elements_by_class_name
Dec 28, 2021 at 17:14
As per the given HTML:
print(driver.find_element_by_css_selector("p.sc-eYdvao.kvdWiq > a").get_attribute('href'))
print(driver.find_element_by_xpath("//p[@class='sc-eYdvao kvdWiq']/a").get_attribute('href'))
If you want to extract all the values of the href attribute you need to use find_elements* instead:
print([my_elem.get_attribute("href") for my_elem in driver.find_elements_by_css_selector("p.sc-eYdvao.kvdWiq > a")])
print([my_elem.get_attribute("href") for my_elem in driver.find_elements_by_xpath("//p[@class='sc-eYdvao kvdWiq']/a")])
Dynamic elements
However, if you observe the values of class attributes i.e. sc-eYdvao and kvdWiq ideally those are dynamic values. So to extract the href attribute you have to induce WebDriverWait for the visibility_of_element_located() and you can use either of the following Locator Strategies:
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "p.sc-eYdvao.kvdWiq > a"))).get_attribute('href'))
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//p[@class='sc-eYdvao kvdWiq']/a"))).get_attribute('href'))
If you want to extract all the values of the href attribute you can use visibility_of_all_elements_located() instead:
print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "p.sc-eYdvao.kvdWiq > a")))])
print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//p[@class='sc-eYdvao kvdWiq']/a")))])
Note : You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
answered Jul 9, 2020 at 18:34
undetected Selenium undetected Selenium
190k 43 43 gold badges 292 292 silver badges 364 364 bronze badges
Get the whole element you want with driver.find_elements(By.XPATH, ‘path’) . To extract the href link use get_attribute(‘href’) . Which gives,
driver.find_elements(By.XPATH, 'path').get_attribute('href')
answered Oct 1, 2022 at 14:08
Muhammed Salem Muhammed Salem
41 2 2 bronze badges
//p[@class='sc-eYdvao kvdWiq']/a
return the elements you are looking for.
Writing the data to CSV file is not related to the scraping challenge. Just try to look at examples and you will be able to do it.
answered Feb 25, 2019 at 9:10
23.4k 7 7 gold badges 36 36 silver badges 57 57 bronze badges
To crawl any hyperlink or Href, proxycrwal API is ideal as it uses pre-built functions for fetching desired information. Just pip install the API and follow the code to get the required output. The second approach to fetch Href links using python selenium is to run the following code.
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select import time list = ['https://www.heliosholland.com/Ampullendoos-voor-63-ampullen','https://www.heliosholland.com/lege-testdozen’] driver = webdriver.Chrome() wait = WebDriverWait(driver,29) for i in list: driver.get(i) image = wait.until(EC.visibility_of_element_located((By.XPATH,'/html/body/div[1]/div[3]/div[2]/div/div[2]/div/div/form/div[1]/div[1]/div/div/div/div[1]/div/img'))).get_attribute('src') print(image)
To scrape the link, use .get_attribute(‘src’).