Selenium перейти к следующей странице с помощью нижнего колонтитула - PullRequest
1 голос
/ 23 апреля 2019

Я использую селен с красивым супом, чтобы попытаться прокрутить сообщение на странице. Я пытался использовать приведенный ниже код для загрузки всех 503 постов, но понял, что страница не прокручивается и не загружается. В нижнем колонтитуле есть цифры, по которым можно щелкнуть, и загружается следующая страница. Кто-нибудь может подсказать, как переходить со страницы на страницу? Я включил исходный код ниже. Например, если бы я хотел просто перейти на страницу 2, я бы использовал селектор css, чтобы найти элемент?

Код:

soup = BeautifulSoup(driver.page_source)

emptLst=[]

for i in range(int(round(503/12))):

    print(i)

    driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')

    time.sleep(3)

Исходный код:

<section class="search-results-pagination-section">
                      <artdeco-pagination class="artdeco-pagination    pv5">
<!---->
    <ul class="artdeco-pagination__pages artdeco-pagination__pages--number">
          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number active selected">
    <span>1</span>
</li>

          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number ">
    <button aria-label="Page 2" data-ember-action="" data-ember-action-252="252">
      <span>2</span>
    </button>
</li>

          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number ">
    <button aria-label="Page 3" data-ember-action="" data-ember-action-255="255">
      <span>3</span>
    </button>
</li>

          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number ">
    <button aria-label="Page 4" data-ember-action="" data-ember-action-258="258">
      <span>4</span>
    </button>
</li>

          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number ">
    <button aria-label="Page 5" data-ember-action="" data-ember-action-261="261">
      <span>5</span>
    </button>
</li>

          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number ">
    <button aria-label="Page 6" data-ember-action="" data-ember-action-264="264">
      <span>6</span>
    </button>
</li>

          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number ">
    <button aria-label="Page 7" data-ember-action="" data-ember-action-267="267">
      <span>7</span>
    </button>
</li>

          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number ">
    <button aria-label="Page 8" data-ember-action="" data-ember-action-270="270">
      <span>8</span>
    </button>
</li>

          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number">
  <button data-ember-action="" data-ember-action-273="273">
    <span>…</span>
  </button>
</li>

          <li class="artdeco-pagination__indicator artdeco-pagination__indicator--number ">
    <button aria-label="Page 21" data-ember-action="" data-ember-action-276="276">
      <span>21</span>
    </button>
</li>

    </ul>

<!----></artdeco-pagination>


                    </section>

1 Ответ

1 голос
/ 23 апреля 2019

Вы можете использовать атрибут = значение для выбора кнопок, например,

driver.find_element_by_css_selector('[aria-label="Page 2"]').click()

Было бы полезно иметь URL для проверки, так как я не могу быть уверен, что видимый в настоящее время 21 действительнопоследнюю страницу, но вы, если бы это было так, вы могли бы собрать все кнопки и извлечь номер последней страницы из последней кнопки в списке, а затем зациклить все страницы, создав значение атрибута aria-label для нажатия:

buttons = d.find_elements_by_css_selector('.artdeco-pagination__pages button')
pages = int(buttons[-1].text)

if pages > 1:
    for page in range(2, pages + 1):
        driver.find_element_by_css_selector('[aria-label="Page {}"]'.format(page)).click()
        #do something
...