Вопрос по 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 шт):

Автор решения: cauf

Как заметил 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)
→ Ссылка