Прокрутка страниц с помощью Python Selenium - PullRequest
0 голосов
/ 26 июня 2018

Я написал скрипт на python, который предназначен для извлечения данных с веб-сайта, но я не могу перемещаться по страницам и собирать ссылки. Веб-сайт https://www.shearman.com/people? Xpath на сайте выглядит следующим образом;

  • ul class="results-pagination "
  • li class/a href onclick="PageRequest('2', event) "

Когда я запускаю запрос ниже, он говорит, что элемент не прикреплен к странице;

 try:
        # this is navigate to next page
        driver.find_element_by_xpath('//ul[@class="results-pagination"]/li/[@onclick=">"]').click()
        time.sleep(5)
    except NoSuchElementException:
       break

Есть идеи, что я делаю не так по этому поводу?

Большое спасибо заранее.

Chris

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете попробовать этот код :

browser.get("https://www.shearman.com/people")  

wait = WebDriverWait(browser, 30) 
main_tab = browser.current_window_handle

navigation_buttons = browser.find_elements_by_xpath('//ul[@class="results-pagination"]//descendant::a')
size = len(navigation_buttons )
print ('this the length of list:',navigation_buttons )  

i = 0 
while i<size:
 ActionChains(browser).key_down(Keys.CONTROL).click(navigation_buttons [i]).key_up(Keys.CONTROL).perform() 
 browser.switch_to_window(main_tab)
 i=i+1;
 if i >= size:
  break  

Обязательно импортируйте эти:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.action_chains import ActionChains

Обратите внимание, это откроет каждую ссылку в новой вкладке. Согласно вашему требованию вы можете нажать на следующую кнопку, используя этот xpath: //ul[@class="results-pagination"]//descendant::a

Если вы хотите открывать ссылки одну за другой на одной и той же вкладке, вам придется обрабатывать ссылки на устаревшие элементы, так как после перемещения с главной страницы все элементы станут устаревшими .

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