首页 > 解决方案 > 使用 python selenium 的 execute_script() 的 ScrollHeight 大小返回不变的结果

问题描述

代码:

在此处输入图像描述

结果:

在此处输入图像描述

图片内容是我当前的代码。我的目标是在 youtube 频道中获取所有视频的数据。但目前我只有 30 个初始视频数据。在执行一次逻辑之后,它就完成了。换句话说,newHeight 的大小等于 lastHeight 的大小。当然,execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")代码正确执行了一次。为什么会出现这个结果?

class Channel:
    def __init__(self):
        self.channelId = ''
        self.Home = ''
        self.Home_title = ''
        self.videoTab = ''
        self.chromedriver = '../chromedriver.exe'
        self.chromeBrowser = webdriver.Chrome(self.chromedriver)

    def __del__(self):
        self.chromeBrowser.quit()

def getVideoData(self):
    self.chromeBrowser.get(self.videoTab)
    lastHeight = self.chromeBrowser.execute_script("return document.documentElement.scrollHeight")
    print('lastHeight : ' + str(lastHeight))
    while True:
        self.chromeBrowser.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
        self.chromeBrowser.implicitly_wait(0.5)
        newHeight = self.chromeBrowser.execute_script("return document.documentElement.scrollHeight")
        print('newHeight : ' + str(newHeight))
        if newHeight == lastHeight:
            break
        lastHeight = newHeight
    page = self.chromeBrowser.page_source
    html = BeautifulSoup(page, 'html.parser')
    for href in html.select('#thumbnail'):
        href.get('href')
    for video_title in html.select('#video-title'):
        print(video_title.text)
    print(len(html.select('#video-title')))

标签: pythonselenium

解决方案


推荐阅读