Python Selenium find_elements() возвращает только 100 элементов, если доступно большеPython

Программы на Python
Ответить
Anonymous
 Python Selenium find_elements() возвращает только 100 элементов, если доступно больше

Сообщение Anonymous »

У меня проблема с Selenium, Python. Метод find_elements(By...) возвращает 100 элементов только тогда, когда их гораздо больше. Вот (часть) моего кода:

Код: Выделить всё

url = "https://www.falstaff.com/de/listings/die-besten-restaurants-in-rheinland-pfalz"

def get_linklist(url):

try:
driver
except:
open_page(url, False)
else:
navigate(url)

try:
time.sleep(2)
#click_cookie_msg()
driver.find_element(By.XPATH, "//p[contains(text(), 'Consent')]").click()
except Exception as e:
print(repr(e))

try:
# this loop scrolls down and clicks the 'load more' function
loop_count = 0

while loop_count < 36:
time.sleep(2)
more_xpath = "//button[contains(text(), 'Weitere anzeigen')]"

more_button = driver.find_element(By.XPATH, more_xpath)

#scroll down
js_code = "arguments[0].scrollIntoView();"
driver.execute_script(js_code, more_button)
time.sleep(2)

driver.execute_script("arguments[0].click();", more_button)

loop_count += 1

except Exception as e:
print(repr(e))

try:
soup = BeautifulSoup(driver.page_source, 'html.parser')

list_items = soup.find_all('div', {'class': 'list-item'})
counter = 0
for item in list_items:
counter += 1

print('Beautifulsoup results: ' + str(counter))

except Exception as e:
pass

try:
time.sleep(2)
search_list_xpath = '//*[@id="main"]/section[4]/div/div/div/div[2]/div[3]/div[1]/div/div/div[3]'
search_list = driver.find_element(By.XPATH, search_list_xpath)
list_items = search_list.find_elements(By.CLASS_NAME, 'list-item')
counter = 0
for item in list_items:
counter += 1

print('Selenium xpath results: ' + str(counter))

except Exception as e:
pass

try:
time.sleep(2)
linklist = []

wait = WebDriverWait(driver, 20)
list_items = wait.until(EC.visibility_of_all_elements_located((By.CLASS_NAME, 'list-item')))

for list_item in list_items:

href = list_item.find_element(By.TAG_NAME, 'a').get_attribute('href')
linklist.append(href)

except Exception as e:
print(repr(e))
pass

print('Selenium class_name results: ')
print(len(linklist))

Эта функция возвращает ровно 100 элементов, независимо от того, как часто я повторяю функцию «загрузить больше». На этой странице и в инструментах разработчика моего браузера доступно более 700 элементов. Мне нужно получить ВСЕ 700 элементов, но find_elements(By...) возвращает максимум 100. Я даже пытался очистить этот сайт с помощью beautifulsoup после "загрузки большего", но там тоже всего 100 элементов. Вывод:

Код: Выделить всё

Beautifulsoup results: 100
Selenium xpath results: 100
Selenium class_name results:
100

В чем здесь проблема? Кто-нибудь может мне помочь?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -available
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»