2017-01-04 3 views
0

Существует страница со столом и следующей кнопкой, которая освежает стол. Теперь я могу извлечь содержимое таблицы, но вам нужно перейти к другим строкам с помощью следующей кнопки. Это ajax-таблица какого-либо типа без href для обновления страницы. Таким образом, я застрял. Страница https://www.whoscored.com/Regions/252/Tournaments/2/Seasons/6335/Stages/13796/PlayerStatistics/England-Premier-League-2016-2017.Селеновые и вращающиеся контейнеры

ответ

1

Я хотел бы сделать следующее:

  • начать бесконечный цикл
  • нажмите на следующую кнопку - если это не удается - выйти из цикла (это ваш «перерыв» состояние)
  • ждать незаметность таблицы загрузки обертки
  • собирать данные игроков

Пример реализации (с использованием selenium ОНЛ у, но вы, вероятно, следует привлекать BeautifulSoup для синтаксического анализа данных игроков - должны быть гораздо быстрее):

from pprint import pprint 

from bs4 import BeautifulSoup 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import ElementNotVisibleException 

root = "https://www.whoscored.com/Regions/252/Tournaments/2/Seasons/6335/Stages/13796/PlayerStatistics/England-Premier-League-2016-2017" 
driver = webdriver.PhantomJS() 
driver.get(root) 


wait = WebDriverWait(driver, 10) 
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#statistics-table-summary .player-link"))) 

# get the first 10 players 
players = [player.text for player in driver.find_elements_by_css_selector("#statistics-table-summary .player-link")] 

while True: 
    try: 
     # click Next 
     driver.find_element_by_link_text("next").click() 
    except ElementNotVisibleException: 
     break # next is not present/visible 

    wait.until(EC.invisibility_of_element_located((By.ID, "statistics-table-summary-loading"))) 

    # collect the next 10 players 
    players += [player.text for player in driver.find_elements_by_css_selector("#statistics-table-summary .player-link")] 
    print(len(players)) 

pprint(players) 
driver.close() 

Обратите внимание, что по мере разбора идет, чтобы повысить производительность, используйте SoupStrainer разобрать только соответствующую таблицу.

+0

спасибо, мой друг, теперь я знаю процесс манипулирования динамическими страницами! Я очень благодарен! Одно небольшое примечание: цикл while становится бесконечным и будет непрерывно добавлять имена на последней странице, поэтому я добавил условие для разрыва после того, как счет достигнет 290 (284 игрока в списке), и Im не уверен, почему он делает это, потому что элемент должен не быть видимым, чтобы его можно было щелкнуть, но это не беспокоит .. спасибо вам, друг! – entercaspa

Смежные вопросы