如何使用selenium python向下滚动谷歌地图

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

我正在尝试使用硒向下滚动谷歌地图页面,但无法这样做。我已经尝试过这里写的所有内容: 使用 selenium python 向下滚动谷歌地图网页

这是我的代码:

def scroll(self):        
    SCROLL_PAUSE_TIME = 5

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

    number = 0

    while True:
        number = number+1

        # Scroll down to bottom
        
        ele = self.find_element_by_css_selector('div[jstcache="211"]')
        print(ele)
        self.execute_script('arguments[0].scrollBy(0, 500)', ele)

        # Wait to load page

        time.sleep(SCROLL_PAUSE_TIME)

        # Calculate new scroll height and compare with last scroll height
        print(f'last height: {last_height}')

        ele = self.find_element_by_css_selector('div[jstcache="211"]')
        
        new_height = self.execute_script("return arguments[0].scrollHeight", ele) 

        print(f'new height: {new_height}')

        if number == 5:
            break

        if new_height == last_height:
            break

        print('cont')
        last_height = new_height

但不知道如何向下滚动。

请帮忙!!

python selenium
6个回答
4
投票

其他答案对我不起作用,所以这就是我想出的。

divSideBar=driver.find_element(By.CSS_SELECTOR,f"div[aria-label='Results for {query}']")

keepScrolling=True
while(keepScrolling):
    divSideBar.send_keys(Keys.PAGE_DOWN)
    time.sleep(0.5)
    divSideBar.send_keys(Keys.PAGE_DOWN)
    time.sleep(0.5)
    html =driver.find_element(By.TAG_NAME, "html").get_attribute('outerHTML')
    if(html.find("You've reached the end of the list.")!=-1):
        keepScrolling=False

“查询”只是您的搜索查询,如屏幕截图中所示here


1
投票

对我有用的解决方案是:

def scroll(self):
    for i in range(6,25,3): 
        last_review = self.find_elements_by_css_selector('div[jstcache="192"]')
        self.execute_script('arguments[0].scrollIntoView(true);', last_review[i])
        time.sleep(5)

其背后的想法是,每次获取所有业务框并滚动到视图中的最后一个,然后等待,再次获取,再次滚动到视图中,依此类推。


0
投票

进入网站后,您很可能会打开侧面板。通过单击屏幕中心一次通过 selenium 来关闭它。然后将箭头键发送到地图元素。

from selenium.webdriver.common.keys import Keys

driver.find_element(BY.CLASS, "dmCR2e widget-scene").click()
driver.find_element(BY.CLASS, "dmCR2e widget-scene").send_keys(Keys.ARROW_DOWN) 

#ARROW_UP ARROW_RIGHT ARROW_LEFT


0
投票

我使用了相同的代码,您可以通过删除以下行来修复它:)

    if number == 5:
    break

0
投票

这个解决方案对我有用

sidebar_div=driver.find_element(By.XPATH,'//*[@class="TFQHme "]')
sidebar_div.click()
no_scroll=3 # how many times do you want to scroll
for page_down in range(0,no_scroll):
    ele = driver.find_element(By.XPATH,'//*[@id="QA0Szd"]/div/div/div[1]/div[2]/div/div[1]/div/div/div[2]/div[1]')
    driver.execute_script('arguments[0].scrollBy(0, 5000);', ele)
    time.sleep(2)

0
投票

我遭受了很多痛苦,然后我从一个随机的 YouTube 家伙那里找到了解决方案。频道名称:使用 Python 自动化:我的问题已通过执行以下操作得到解决: 将类名相应替换为您的位置: 结果 = driver.find_elements(By.CLASS_NAME, 'hfpxzc') driver.execute_script("返回参数[0].scrollIntoView();", 结果[-1])

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