iframe内筛选后链接列表滚动脚本失效问题求助
解决滚动筛选器区域无效果的问题
看起来你的滚动脚本没起作用,大概率是因为你滚动的是整个页面的body,但实际搜索结果是放在独立的滚动容器里的(就是那个search-results区域),所以直接滚动页面自然没效果。我给你调整下代码,针对目标容器来滚动:
调整后的完整代码
from selenium import webdriver as web from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait as wait from selenium.webdriver.support import expected_conditions as EC driver = web.Chrome('/Users/JakesComp/Documents/chromedriver') driver.get("https://foodmarketmaker.com/main/mmsearch") # 切换到iframe iframe = driver.find_element_by_tag_name("iframe") driver.switch_to.frame(iframe) # 点击搜索框并选择商家类型 wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//section[@id="search-right"]//input[@placeholder="start typing to search"]'))).click() wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//li[@aria-label="Business Type: Farmer/Rancher"]'))).click() # 定位到搜索结果的滚动容器 results_container = wait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//section[@id="search-results"]'))) # 循环滚动容器,直到没有新内容加载 last_height = driver.execute_script("return arguments[0].scrollHeight;", results_container) while True: # 滚动到容器底部 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight;", results_container) # 等待内容加载 driver.implicitly_wait(2) # 获取新的滚动高度 new_height = driver.execute_script("return arguments[0].scrollHeight;", results_container) # 如果高度不再变化,说明加载完了 if new_height == last_height: break last_height = new_height # 提取所有链接 links = wait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, '//section[@id="search-results"]//a[.//*[name()="svg"]]'))) for link in links: print(link.get_attribute('href'))
关键调整点
- 不再滚动整个
window,而是定位到search-results这个滚动容器,用arguments[0].scrollTop = arguments[0].scrollHeight来滚动它 - 增加了循环滚动逻辑,确保所有动态加载的内容都被加载出来(很多网站会在滚动到底部时加载新内容)
- 每次滚动后等待一小段时间,让页面有足够时间加载新内容
这样调整后,应该就能正确滚动筛选器区域,获取到所有的链接了。
内容的提问来源于stack exchange,提问作者Jake McLaughlin
相关产品推荐
相关产品推荐

