使用Selenium WebDriver及Javascript Executor无法滚动网页求助
解决Selenium无法滚动iremedy页面的问题
你的代码无法滚动页面,大概率是因为body元素未获得焦点,或者页面的实际滚动区域并非全局body。以下是几种可行的解决方案:
方法1:直接用JavaScript执行全局滚动
这种方法无需依赖元素聚焦,直接操作浏览器窗口滚动,兼容性最好:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome('chromedriver.exe') driver.get('https://iremedy.com/search?query=Vital%20Signs%20Monitors') # 用显式等待替代time.sleep,确保页面加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, 'product-item')) ) # 滚动到页面底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
方法2:滚动特定容器(如果页面用嵌套容器承载滚动内容)
部分页面的商品列表会放在固定高度的独立容器中,此时需要滚动该容器而非全局窗口:
# 找到页面的滚动容器(需根据实际页面结构调整选择器,示例为商品列表容器) scroll_container = driver.find_element(By.CSS_SELECTOR, '.search-results-container') # 滚动容器到底部 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight;", scroll_container)
方法3:修正原代码的元素聚焦问题
如果坚持使用Keys.END,需要先让body元素获得焦点再发送按键:
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains body = driver.find_element(By.TAG_NAME, 'body') # 点击body获取焦点 body.click() # 模拟按下END键 ActionChains(driver).send_keys(Keys.END).perform()
注意事项
- 尽量避免使用
time.sleep(),显式等待(WebDriverWait)能更精准地等待页面元素加载完成,避免因网络延迟导致的滚动失效。 - 如果滚动后需要加载更多内容,可以循环执行滚动+等待,直到页面高度不再变化。
内容的提问来源于stack exchange,提问作者Muhammad Talha Zeb Khan
相关产品推荐
相关产品推荐

