Бесконечная прокрутка не прокручивается

#python #selenium

#python #селен

Вопрос:

Мой код очищает заголовки видео на YouTube, но не прокручивает вниз, чтобы очистить все заголовки.

Когда selenium открывает браузер, он вообще не прокручивается. Как я могу изменить код для бесконечной прокрутки вниз и в конечном итоге очистить все заголовки.

 import time
from selenium import webdriver
from bs4 import BeautifulSoup
import requests
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager

options = Options()
driver = webdriver.Chrome(ChromeDriverManager().install())
url='https://www.youtube.com/results?search_query=doctor'
driver.get(url)
content=driver.page_source.encode('utf-8').strip()
soup=BeautifulSoup(content,'lxml')
SCROLL_PAUSE_TIME = 0.5

# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)
    titles = soup.findAll('a', id='video-title')
    for title in titles:
        print(title.text)

    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height
 

Ответ №1:

Вы используете scrollHeight для получения текущей высоты, но это значение не меняется при прокрутке. Посмотрите здесь, чтобы увидеть, что вы должны использовать scrollTop вместо этого. В нем также говорится, что вы должны использовать это уравнение, чтобы определить, находится ли прокрутка внизу:

 element.scrollHeight - element.scrollTop === element.clientHeight
 

Ответ №2:

Для меня это работает нормально.

 import time
from selenium import webdriver
from bs4 import BeautifulSoup
import requests
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager

options = Options()
driver = webdriver.Chrome(ChromeDriverManager().install())
url='https://www.youtube.com/results?search_query=doctor'
driver.get(url)
content=driver.page_source.encode('utf-8').strip()
soup=BeautifulSoup(content,'lxml')
SCROLL_PAUSE_TIME = 1

# Get scroll height
last_height = driver.execute_script("return document.documentElement.scrollHeight")

while True:
    # Scroll down to bottom
    print('In While True')
    driver.execute_script("window.scrollTo(0, arguments[0]);", last_height)
    print('executed')
    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)
    print('slept')
    titles = soup.findAll('a', id='video-title')
    for title in titles:
        print(title.text)

    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.documentElement.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height