我正在使用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
我使用了谷歌浏览器,并且检查元素在所有系统上都相同(很可能是)。
有关完整的代码,如果您无法理解问题,可以对我发表评论。我可以为您提供重新创建情况所需的代码,以更好地理解。
我假设您已经使用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
花了我一些时间,但是有效。