#python #selenium #web-scraping #xpath
Вопрос:
Мой код переходит на веб-сайт, и на веб-сайте есть статья, которая содержит свою собственную ссылку/url/href.
Я хочу распечатать это поле.
Мой текущий код выделяет контейнер, в котором он находится, а затем я пытаюсь выполнить цикл for, чтобы получить href.
from selenium import webdriver
driver = webdriver.Chrome()
import time
url = 'https://library.ehaweb.org/eha/#!*menu=6*browseby=8*sortby=2*media=3*ce_id=2035*label=21986*ot_id=25553*marker=1283*featured=17286'
driver.get(url)
time.sleep(3)
page_source = driver.page_source
container=driver.find_element_by_xpath("//div[@class='list-box col-md-6 col-lg-6 col-xl-4 test']")
for j in container:
link= j.find_element_by_css_selector('a').get_attribute('href')
print(link)
Комментарии:
1. Как называется эта статья?
Ответ №1:
Если я правильно понимаю, чего вы хотите, вам просто нужно распечатать дочерний (a) атрибут элемента:
link = driver.find_element_by_xpath("//div[@class='list-box col-md-6 col-lg-6 col-xl-4 test']/a").get_attribute("href")
print(link)
Это печатает:
Если вы хотите использовать цикл, затем измените container=driver.find_element_by_xpath("//div[@class='list-box col-md-6 col-lg-6 col-xl-4 test']")
его на
container=driver.find_elements_by_xpath("//div[@class='list-box col-md-6 col-lg-6 col-xl-4 test']")
Именно для этого элемента было бы достаточно следующего локатора:
//div[contains(@class, 'test')]/a
Со следующим кодом:
driver = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')
url = 'https://library.ehaweb.org/eha/#!*menu=6*browseby=8*sortby=2*media=3*ce_id=2035*label=21986*ot_id=25553*marker=1283*featured=17286'
driver.get(url)
driver.implicitly_wait(10)
container = driver.find_elements_by_xpath("//div[contains(@class, 'test')]")
for j in container:
link = j.find_element_by_css_selector('a').get_attribute('href')
print(link)
driver.close()
Комментарии:
1. не могли бы вы, пожалуйста, опубликовать выходные данные цикла for? я не уверен, использовали ли вы xpath для //div[содержит(@class, ‘test’)]/строку
2. library.ehaweb.org/eha/2021/eha2021-virtual-congress/324511/…
Ответ №2:
Эта страница содержит множество внутренних URL-адресов. Чтобы нажать на виртуальный контейнер EHA 2021, вы можете использовать приведенный ниже код.
eha_2021 = driver.find_element_by_css_selector('div#listing-main a')
eha_2021_link = eha_2021_link.get_attribute('href')
print(eha_2021_link)
На всякий случай, если вы хотите нажать на COVID-19 Outbreak
кнопку, вы можете попробовать приведенный ниже код.
Код :
covid_19_element = driver.find_element(By.ID, 'menu-8')
covid_19_url = covid_19_element.get_attribute('href')
print(covid_19_url)
Предложение :
Старайтесь избегать такого xpath //div[@class='list-box col-md-6 col-lg-6 col-xl-4 test']
, это выглядит немного динамично и может измениться в зависимости от региона. Всегда используйте локатор в следующем порядке :
- ID
- Имя
- ТагНаме
- Имя класса
- Текст Ссылки
- Частичный Текст Ссылки
- Селектор CSS
- XPATH
Узнайте о них здесь
Ответ №3:
Это помогает мне получить href
elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
print(elem.get_attribute("href"))
Пройдите по списку, возьмите каждый элемент и извлеките из него требуемое значение атрибута (в данном случае href).
Комментарии:
1. Как это может помочь? Оператору не нужен текущий URL-адрес, ему нужен URL-адрес статьи, содержащейся на веб-сайте
2. Первоначальный ответ был совершенно другим. Теперь это просто слегка измененная версия моего ответа.