Доступ к следующей странице с использованием селена - PullRequest
0 голосов
/ 04 июня 2019

Во-первых, я никогда не использовал селен до вчерашнего дня. После многих попыток я смог правильно очистить целевой стол.

В настоящее время я пытаюсь почистить таблицы на последовательных страницах. Иногда это работает, а иногда - сразу. Я провел часы в Google и Stack Overflow, но не решил свою проблему. Я уверен, что ответ прост, но через 8 часов мне нужно задать вопрос экспертам по селену.

Мой целевой URL: Советы по безопасности RedHat

Если есть вопрос о переполнении стека, который отвечает на мою проблему, пожалуйста, дайте мне знать, и я проведу некоторые исследования и тестирование.

Вот некоторые из вещей, которые я пробовал:

Пример 1:

page_number = 0
while True:
  try:
    page_number += 1

    browser.execute_script("return arguments[0].scrollIntoView(true);",
                           WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="jumpPoint"]/div[3]/div/div/div[2]/div/div['
                                                                                                  '2]/dir-pagination-controls/ul/li[str(page_number))]'))))

    browser.find_element_by_xpath('//*[@id="jumpPoint"]/div[3]/div/div/div[2]/div/div[2]/dir-pagination-controls/ul/li[str(page_number)').click()

    print(f"Navigating to page {page_number}")

    # I added this because my connection was 
    # being terminated by RedHat
    time.sleep(20)

except (TimeoutException, WebDriverException) as e:
    print("Last page reached")
    break

except Exception as e:
    print (e)
    break

Пример 2:

page_number = 0
  while True:
   try:
     page_number += 1

     browser.execute_script("return arguments[0].scrollIntoView(true);",
                           WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="jumpPoint"]/div[3]/div/div/div[2]/div/div['
                                                                                                  '2]/dir-pagination-controls/ul/li[12]'))))

     browser.find_element_by_xpath('//*[@id="jumpPoint"]/div[3]/div/div/div[2]/div/div[2]/dir-pagination-controls/ul/li[12]').click()

     print(f"Navigating to page {page_number}")

     # I added this because my connection was 
     # being terminated by RedHat
     time.sleep(20)

 except (TimeoutException, WebDriverException) as e:
     print("Last page reached")
     break

 except Exception as e:
    print (e)
    break

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Вы можете использовать приведенную ниже логику.

lastPage = WebDriverWait(driver,120).until(EC.element_to_be_clickable((By.XPATH,"(//ul[starts-with(@class,'pagination hidden-xs ng-scope')]/li[starts-with(@ng-repeat,'pageNumber')])[last()]")))
driver.find_element_by_css_selector("i.web-icon-plus").click()
pages = lastPage.text
pages = '5'
for pNumber in range(1,int(pages)):
    currentPage = WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH,"//ul[starts-with(@class,'pagination hidden-xs ng-scope')]//a[.='" + str(pNumber) + "']")))
    print ("===============================================")
    print("Current Page : " + currentPage.text)
    currentPage.location_once_scrolled_into_view
    currentPage.click()
    WebDriverWait(driver,120).until_not(EC.element_to_be_clickable((By.CSS_SELECTOR,"#loading")))
    # print rows data here
    rows = driver.find_elements_by_xpath("//table[starts-with(@class,'cve-table')]/tbody/tr") #<== getting rows here
    for row in rows:
        print (row.text) <== I am printing all row data, if you want cell data please update the logic accordingly
    time.sleep(randint(1, 5)) #<== this step is optional
0 голосов
/ 04 июня 2019

Я полагаю, что вы можете читать данные напрямую, используя url, вместо того, чтобы пытаться разбивать на страницы, это приведет к уменьшению проблем с синхронизацией из-за сбоя сценария

  1. Используйте этот xpath для получения общегонет страниц для таблицы обновлений безопасности.// * [@ ID = "jumpPoint"] / дела [3] / дела / дела / дела [2] / дела / дела [2] / реж-разбиения на страницах-контроль / мклы / литий [11]

  2. Выполнить цикл до получения числа страниц из шага 1 Внутри цикла передать номер страницы в URL ниже и отправить запрос на получение https://access.redhat.com/security/security-updates/#/security-advisories?q=&p=page_number&sort=portal_publication_date%20desc&rows=10&portal_advisory_type=Security%20Advisory&documentKind=PortalProduct

  3. дождаться загрузки страницы

  4. Считывание данных из таблицы, заполненной на странице

  5. Этот процесс будет выполняться до подсчета нумерации страниц

  6. В случае, если вы найдете конкретныеошибка, что сайт заблокировал пользователя, тогда вы можете обновить страницу с тем же номером страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...