Selenium Python Firefox中MoveTargetOutOfBoundsException问题求助
解决Selenium点击IMDb"Load More"按钮时的MoveTargetOutOfBoundsException问题
- 核心问题:点击一次后新内容加载,按钮位置超出当前视口,直接点击触发坐标越界错误。以下是可靠的解决步骤:
强制滚动到按钮可见区域
在点击前用JavaScript将按钮滚动到视口中,避免坐标问题:# 找到按钮后执行滚动 driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", load_more_btn)block: 'center'确保元素位于视口中间,避免部分被遮挡。使用WebDriverWait等待元素可点击
不要直接查找元素就点击,等待元素完全加载并可交互:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import time wait = WebDriverWait(driver, 10) while True: try: # 等待按钮可点击 load_more_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Load more')]"))) # 滚动到按钮 driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", load_more_btn) # 用JavaScript直接点击,绕过鼠标坐标问题 driver.execute_script("arguments[0].click();", load_more_btn) # 等待内容加载(可根据实际情况调整等待时间,或用更智能的等待) time.sleep(2) except: # 按钮消失,退出循环 break替代方案:用ActionChains配合滚动
如果坚持用鼠标点击,先滚动再移动到元素:from selenium.webdriver.common.action_chains import ActionChains # 滚动后移动到元素并点击 ActionChains(driver).move_to_element(load_more_btn).click().perform()但这种方式仍可能受视口限制,优先推荐JavaScript点击。
注意反爬限制
IMDb会检测频繁请求,建议在每次点击后加入随机等待时间(比如1-3秒),避免被限制访问。
内容的提问来源于stack exchange,提问作者ozymandingus_
相关产品推荐
相关产品推荐

