Прокрутите вниз, пока невидимый элемент не станет видимым с помощью Selenium - PullRequest
0 голосов
/ 15 февраля 2020

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

from selenium import webdriver
from datetime import datetime
from time import sleep


if __name__ == '__main__':
   driver = webdriver.Chrome()
   driver.get('https://hdmatches.com/category/premier-league/')
   matches = driver.find_element_by_xpath('//*[@id="td-outer-wrap"]/div[4]/div/div/div[1]')
   last_date = \
       matches.find_elements_by_xpath('//div[@class="td_module_10 td_module_wrap td-animation-stack"]')[
       -1].find_element_by_class_name('item-details').find_element_by_class_name(
       'td-module-meta-info').find_element_by_class_name('td-post-date').text
   last_date = datetime.strptime(last_date, '%B %d, %Y').date()
   start_season = datetime.strptime('2017-8-11', '%Y-%m-%d').date()

   while last_date > start_season:
      load_more = matches.find_element_by_xpath('//div[@class="td-load-more-wrap td-load-more-infinite-wrap"]')
      driver.execute_script("arguments[0].scrollIntoView();", load_more)
      matches = driver.find_element_by_xpath('//*[@id="td-outer-wrap"]/div[4]/div/div/div[1]')
      last_date = \
          matches.find_elements_by_xpath('//div[@class="td_module_10 td_module_wrap td-animation-stack"]')[
          -1].find_element_by_class_name('item-details').find_element_by_class_name(
          'td-module-meta-info').find_element_by_class_name('td-post-date').text
      last_date = datetime.strptime(last_date, '%B %d, %Y').date()

Мой сценарий не работает, софт (ничего не происходит), и я думаю, что из-за элемента ниже:

enter image description here

При прокрутке вниз этот элемент виден два раза при загрузке страницы. После этого следующий элемент загружает страницу:

enter image description here

Пожалуйста, совет / помощь. Высоко ценится

1 Ответ

0 голосов
/ 15 февраля 2020

Вы можете прокрутить до нижней части страницы, нажать кнопку «Загрузить еще» и повторять, пока не достигнете даты. Похоже, что даты игры не go так далеко назад, и дата вашего стартового сезона не была достигнута, поэтому я изменил ее на год спустя, и она сработала. Я также использовал javascript, чтобы нажать кнопку «Загрузить еще», потому что что-то еще блокировало ее с помощью веб-драйвера. Вот изменения кода:

start_season = datetime.strptime('2018-8-11', '%Y-%m-%d').date()

   while last_date > start_season:
      driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
      load_more = matches.find_element_by_xpath('//div[@class="td-load-more-wrap td-load-more-infinite-wrap"]')
      driver.execute_script("arguments[0].click();", load_more)
      matches = driver.find_element_by_xpath('//*[@id="td-outer-wrap"]/div[4]/div/div/div[1]')
      last_date = \
          matches.find_elements_by_xpath('//div[@class="td_module_10 td_module_wrap td-animation-stack"]')[
          -1].find_element_by_class_name('item-details').find_element_by_class_name(
          'td-module-meta-info').find_element_by_class_name('td-post-date').text
      last_date = datetime.strptime(last_date, '%B %d, %Y').date()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...