Как перейти по элементу пагинации
Есть сайт где при переходе на следующую страницу не меняется ссылка, и собственно в элементах пагинации нет атрибута href который можно было бы подставить в ссылку и перейти на следующую страницу, но как тогда спарсить все страницы, а не только первую?
Вот условие для нажатия на элемент пагинации:
# Если есть кнопка перехода на следующую страницу, то продолжаем цикл, иначе завершаем
try:
a_next_page = driver.find_element_by_css_selector('.ajax-button').click()
except NoSuchElementException:
break
finally:
driver.quit()
return items
Вот сам html/css кнопки:
.catalog-products .pagination .ajax-button {
display: inline-block;
}
.pagination .ajax-button {
width: 100%;
background: #fff;
border: 1
px
solid #e6eef6;
box-sizing: border-box;
border-radius: 4
px
;
display: flex;
align-items: center;
justify-content: center;
font-style: normal;
font-weight: 600;
font-size: 14px;
line-height: 18px;
color: #4982bd;
padding: 20
px
0;
}
.ajax-button {
background: #fff;
border: 1
px
solid #e6eef6;
box-sizing: border-box;
border-radius: 4
px
;
display: flex;
align-items: center;
justify-content: center;
font-style: normal;
font-weight: 600;
font-size: 14px;
line-height: 18px;
color: #4982bd;
}
<div class="pagination-loader"><button type="button" class="ajax-button"><span class="ajax-button-title">еще товары</span></button></div>
Вот код парсера, если нужен:
Ответы (1 шт):
В этом куске кода вы запускаете бесконечный цикл, где в начале цикла делаете запрос страницы, парсите ее, и если есть кнопка 'показать еще', нажимаете ее. На следующей итерации вы снова запрашиваете заново страницу, естественно она грузится с нуля и вы ее еще раз парсите. Вам нужно один только раз сделать запрос(вынесите из цикла его).
try:
while True:
print('Load:', url)
driver.get(url)
for item_el in driver.find_elements_by_css_selector("col-inline-xs-3 middle catalog-products-column"):
name = item_el.find_element_by_css_selector('.product-micro-title').text
# Не у всех товаров есть цена
try:
price = item_el.find_element_by_css_selector('.product-micro-price').text
except NoSuchElementException:
price = '-'
try:nal = item_el.find_element_by_css_selector('.v-price-box__text--out-stock').text
except NoSuchElementException:
nal = "Есть в наличии"
row = name, price, nal
print(row)
items.append(row)
# Если есть кнопка перехода на следующую страницу, то продолжаем цикл, иначе завершаем
try:
a_next_page = driver.find_element_by_css_selector('.ajax-button').click()
except NoSuchElementException:
break
Вот так не будет повторно грузить одно и то же:
print('Load:', url)
driver.get(url)
try:
while True:
for item_el in driver.find_elements_by_css_selector("col-inline-xs-3 middle catalog-products-column"):
name = item_el.find_element_by_css_selector('.product-micro-title').text
# Не у всех товаров есть цена
try:
price = item_el.find_element_by_css_selector('.product-micro-price').text
except NoSuchElementException:
price = '-'
try:nal = item_el.find_element_by_css_selector('.v-price-box__text--out-stock').text
except NoSuchElementException:
nal = "Есть в наличии"
row = name, price, nal
print(row)
items.append(row)
# Если есть кнопка перехода на следующую страницу, то продолжаем цикл, иначе завершаем
try:
a_next_page = driver.find_element_by_css_selector('.ajax-button').click()
except NoSuchElementException:
break