Есть страница с таблицей и кнопка «Далее», которая обновляет таблицу. Теперь я могу извлечь содержимое таблицы, но мне нужно перейти к другим строкам, используя кнопку «Далее». Это какая-то таблица 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()
Обратите внимание: что касается синтаксического анализа, для повышения производительности используйте _ 4_ только для анализа соответствующей таблицы.
person
alecxe
schedule
04.01.2017
спасибо, друг, теперь я знаю процесс управления динамическими страницами! Я очень благодарен! Одно небольшое примечание: цикл while становится бесконечным и будет постоянно добавлять имена на последней странице, поэтому я добавил условие для прерывания после того, как счетчик достигнет 290 (284 игрока в списке), и я не уверен, почему он это делает, потому что элемент должен не будет видно для нажатия, но это не проблема .. спасибо, друг!
- person entercaspa; 05.01.2017