咨询:Selenium操控Google Maps左侧结果面板无法滚动的修复方案
解决Google Maps左侧结果面板滚动问题
你当前代码的问题在于,window.scrollTo(0,document.body.scrollHeight)是滚动整个页面的body元素,但Google Maps左侧的结果面板是一个独立的可滚动容器,不属于页面body的滚动范围,所以这个操作对它无效。
正确的实现方式
需要针对定位到的结果面板元素(即//div[@role="feed"])执行滚动操作,而非整个窗口。以下是修改后的代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time url = "https://www.google.com/maps/@12.959744,77.6142848,12z?entry=ttu" driver = webdriver.Chrome() driver.get(url) driver.maximize_window() time.sleep(15) # 搜索餐厅 search_box = WebDriverWait(driver,15).until(EC.presence_of_element_located((By.XPATH,"//input[@id = 'searchboxinput']"))) time.sleep(5) search_box.send_keys("restaurants") search_box.send_keys(Keys.RETURN) time.sleep(12) # 定位左侧结果面板(可滚动容器) results_panel = WebDriverWait(driver,20).until(EC.presence_of_element_located((By.XPATH,'//div[@role="feed"]'))) time.sleep(10) # 方式1:单次滚动到面板底部 driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight;', results_panel) time.sleep(8) # 方式2:循环滚动,直到加载完所有结果(更实用,因为Google Maps是动态加载) # last_height = driver.execute_script('return arguments[0].scrollHeight', results_panel) # while True: # driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight;', results_panel) # time.sleep(3) # 等待新内容加载 # new_height = driver.execute_script('return arguments[0].scrollHeight', results_panel) # if new_height == last_height: # break # 高度不再变化,说明没有更多结果 # last_height = new_height
关键说明
arguments[0]在JavaScript代码中对应传入的results_panel元素,通过修改它的scrollTop属性,直接控制这个容器的滚动位置。- 如果需要获取所有搜索结果,建议使用方式2的循环滚动,因为Google Maps会在滚动到底部时动态加载新内容,单次滚动只能看到当前加载的部分。
内容的提问来源于stack exchange,提问作者venkatesh L
相关产品推荐
相关产品推荐

