在Python中使用Selenium在Chrome中滚动到另一层中

问题描述 投票:0回答:1

我正在使用selenium模块在python中编写代码,我想滚动查看同一窗口中不同层上的列表。假设您转到Instagram,单击关注者,然后希望向下滚动到底部,以便硒可以列出关注该页面的所有用户的列表。

我的问题是我的代码在下面的图层上滚动,该图层是用户的墙。

def readingFollowers(self):
    self.driver.find_element_by_xpath("//a[contains(@href, '/followers')]")\
        .click()    

    sleep(2.5)

    scroll_box = self.driver.find_element_by_xpath('/html/body/div[4]/div/div[2]')

    # Get scroll height
    last_height = self.driver.execute_script("return arguments[0].scrollHeight", scroll_box)

    while True:
        # Scroll down to bottom
        self.driver.execute_script("window.scrollTo(0, arguments[0].scrollHeight);", scroll_box)

        # Wait to load page
        sleep(1)

        # Calculate new scroll height and compare with last scroll height
        new_height = self.driver.execute_script("return arguments[0].scrollHeight", scroll_box)
        if new_height == last_height:
            break
        last_height = new_height

我使用了谷歌浏览器,并且检查元素在所有系统上都相同(很可能是)。

有关完整的代码,如果您无法理解问题,可以对我发表评论。我可以为您提供重新创建情况所需的代码,以更好地理解。

python selenium scroll webdriver instagram
1个回答
0
投票

我假设您已经使用IG帐户登录。

def readingFollowers(self):
    #click followers
    self.driver.find_element_by_xpath('//a[@class="-nal3 "]').click()
    time.sleep(5)

    pop_up = driver.find_element_by_xpath('//div[@class="isgrP"]')
    height = driver.execute_script("return arguments[0].scrollHeight", pop_up)
    initial_height = height

    #default follower count is 12
    followers_count = 12
    while True:
        driver.execute_script("arguments[0].scrollBy(0,arguments[1])", pop_up, initial_height)
        time.sleep(5)

        #count loaded followers
        count = len(driver.find_elements_by_xpath('//div[@class="PZuss"]/li')) 
        if count == followers_count:
            break
        followers_count = count

        #add height because the list is expanding
        initial_height+=initial_height

花了我一些时间,但是有效。

© www.soinside.com 2019 - 2024. All rights reserved.