Вопрос по Python и Selenium, почему переходит только по первой ссылке?
Фрагмент кода:
def parse_url(self, element):
href_list = []
url = element.find_element_by_css_selector('a.bloko-link.HH-LinkModifier')
href = url.get_attribute('href')
href_list.append(href)
for i in href_list:
self.parse_element(url = i)
def parse_element(self, url):
self.driver.get(url)
company_name = self.driver.find_element_by_css_selector('div.bloko-gap.bloko-gap_bottom')
print(company_name)
Во второй функции на первой строке делает запрос только по первой ссылке, и выдает только один результат.
В первой функции точно не одна ссылка в href_list.
Ведь на каждой итерации webdriver должен осуществлять запрос.
Ответы (1 шт):
Как заметил icYFTL в комментарии, в функции parse_url в переменную href_list добавляется всего один URL-адрес. Если подразумевается, что блоков с селектором 'a.bloko-link.HH-LinkModifier' несколько, то для получения их всех необходимо использовать метод find_elements_by_css_selector аргумента element, который возвращает объекты на все блоки с подходящим селектором. Обратите внимание, что в названии метода используется множественное число "elements", в отличии от метода, использованного вами.
Так же, для извлечения значения блока нужно использовать свойство text элемента.
В этом случае код будет выглядеть как-то вот так:
def parse_url(self, element):
urls = element.find_elements_by_css_selector('a.bloko-link.HH-LinkModifier')
href_list = [u.get_attribute('href') for u in urls]
for i in href_list:
self.parse_element(url = i)
def parse_element(self, url):
self.driver.get(url)
company_div = self.driver.find_element_by_css_selector('div.bloko-gap.bloko-gap_bottom')
company_name = company_div.text
print(company_name)