#python #selenium #xpath #css-selectors
Вопрос:
У меня возникли проблемы с нажатием кнопки «далее» на этой странице:
https://www.govinfo.gov/app/collection/uscourts/district/alsd/2021/{«pageSize»:»500″,»offset»:»0″}
Я пробовал xpath, css_selector и без костей. Вот код:
try:
next_page = driver.find_element_by_xpath('//*[@id="collapseOne3578"]/div/span[1]/div/ul/li[4]')
if next_page:
print('Trying to get next page')
print(next_page)
next_page.click()
else:
continue
except:
break
Я поместил переменную в оператор try, потому что на некоторых страницах нет результатов более 500 и, следовательно, нет кнопки «Далее». Если я определил переменную вне оператора, код прерывается.
Спасибо за вашу помощь
Ответ №1:
Вы используете неправильный локатор.
Пожалуйста, попробуйте это:
next_page = driver.find_element_by_xpath('//li[@class="next fw-pagination-btn"]')
или это
next_page = driver.find_element_by_css_selector('li.next.fw-pagination-btn')
Не забудьте добавить условие ожидания, предпочтительно ожидание, прежде чем находить элемент.
Комментарии:
1. Привет 🙂 у вас опечатка в примере css,
css-selector
вместо дефиса должно быть подчеркивание. Кроме того, мне больше нравится селекторli.next.fw-pagination-btn
, но, думаю, это не имеет особого значения.2. Я пробовал оба способа, и я получаю: поднять класс исключений(сообщение, экран, трассировка стека) selenium.common.исключения. Исключение NoSuchElementException: Сообщение: Не удается найти элемент: //li[@class=»следующая страница fw-btn»]
3. Вы пробовали добавить режим сна / ожидания?
4. Это сработало. next_page = WebDriverWait(драйвер,5).до(EC.element_to_be_clickable((По.XPATH,’//li[@class=»следующая fw-разбиение на страницы-btn»]’))). Но у меня возникла новая проблема: как загрузить новые результаты в selenium, чтобы я мог продолжать получать новые данные? Обновляет ли click() данные?
5. Как вы уже упоминали, это новый вопрос. Правила Stackoverflow требуют задавать только один вопрос на вопрос. Поэтому, пожалуйста, примите этот ответ, а затем, пожалуйста, задайте новый отдельный вопрос. Мы будем рады помочь вам снова.
Ответ №2:
Попробуйте это:
driver.find_element_by_xpath(".//ul[@class='pagination']/li/a[text()='Next']").click()
Ответ №3:
Элемент не был виден, поэтому я использовал:
next_page = WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH,'//li[@class="next fw-pagination-btn"]')))
driver.execute_script('arguments[0].click()', next_page)
И это сработало.