Селен и вращающиеся контейнеры

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


person entercaspa    schedule 04.01.2017    source источник


Ответы (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()

Обратите внимание: что касается синтаксического анализа, для повышения производительности используйте _ 4_ только для анализа соответствующей таблицы.

person alecxe    schedule 04.01.2017
comment
спасибо, друг, теперь я знаю процесс управления динамическими страницами! Я очень благодарен! Одно небольшое примечание: цикл while становится бесконечным и будет постоянно добавлять имена на последней странице, поэтому я добавил условие для прерывания после того, как счетчик достигнет 290 (284 игрока в списке), и я не уверен, почему он это делает, потому что элемент должен не будет видно для нажатия, но это не проблема .. спасибо, друг! - person entercaspa; 05.01.2017