Проблема в парсинге

Пишу парсер для PROZORRO, использую Python. Написал скрипт, чтобы работало нажатие на кнопку. Кнопка нажимается, и, раз она нажата, то скрипт должен вывести 20 ссылок, но он выводит только 10:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

def main():
    global driver
    driver = webdriver.Chrome(ChromeDriverManager().install())
    driver.get('https://prozorro.gov.ua/tender/search?query=освіта')
    btn = driver.find_element_by_class_name('show-more')

    btn.click()
if __name__ == '__main__':
    main()


links = driver.find_elements_by_xpath("//div[@class='items-list']//a")
for i in links:
    print(i.get_attribute('href'))

driver.quit()

Что я делаю не так ?


Ответы (2 шт):

Автор решения: Aydar Naumetov

Зашёл на данный сайт, сделал просмотр кода данной страницы, далее в ctrl+F вбил: class="items-list" выдало 10 совпадений. Проблема в следующей строке:

links = driver.find_elements_by_xpath("//div[@class='items-list']//a")

а именно: [@class='items-list'] - он находит классы только с идентичным названием.

→ Ссылка
Автор решения: kola444514

Я решил данную проблему.

```python
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import csv
import time
links_list = []


driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://prozorro.gov.ua/tender/search?query=освіта')


def new_links():
    links = driver.find_elements_by_xpath("//div[@class='items-list']//a")
    for i in links:
        time.sleep(1)
        print(i.get_attribute('href'))
        b = i.get_attribute('href')
        a = ({
            'link':b
        })
        links_list.append(a)
        print(len(links_list))

    new_start()

def new_start():
    btn = driver.find_element_by_class_name('show-more')
    btn.click()
    new_links()
new_start()
driver.quit()

```

До меня дошло что у сервера не хватает времени на обработку запроса при нажатии на кнопку. Поэтому было решено добавить остановку времени в 1 сек. Тут всё ещё наверное много лишнего. Если кто-то считает моё решение не правильным, то пожалуйста напишите что не так.

→ Ссылка