如何在Selenium中获取搜索跳转后的新页面内容以爬取数据?
解决Selenium中搜索跳转新页面后无法获取内容的问题
问题核心是:搜索后网站打开了新的浏览器窗口,但你的browser对象仍然指向初始的首页窗口,所以无法访问新页面的内容。需要手动切换到新窗口的句柄。
解决步骤:
- 提交搜索后,获取当前所有窗口的句柄列表
- 切换到最新打开的窗口(列表最后一个元素)
- 等待新页面加载完成,再进行数据爬取操作
修改后的完整代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC cfr = input("Enter the title of your desired Code of Federal Regulations: ") browser = webdriver.Firefox() url = "https://ecfr.gov" browser.get(url) # 点击搜索框、输入内容并提交 WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.ID, "suggestions"))).click() search_box = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.ID, "suggestion_query"))) search_box.send_keys(cfr) search_box.submit() # 获取所有窗口句柄,切换到新打开的窗口 window_handles = browser.window_handles # 切换到最后一个窗口(新打开的页面) browser.switch_to.window(window_handles[-1]) # 等待新页面加载完成,可根据页面特征元素调整等待条件 WebDriverWait(browser, 20).until(EC.presence_of_element_located((By.TAG_NAME, "body"))) # 现在可以获取新页面的URL和内容了 new_page_url = browser.current_url print(f"新页面URL: {new_page_url}") # 在此处添加你的爬取逻辑,比如提取特定数据 # 示例:target_content = browser.find_element(By.CSS_SELECTOR, "your-target-selector").text # 若需切回原窗口,可执行: # browser.switch_to.window(window_handles[0]) # 爬取完成后关闭浏览器 # browser.quit()
关键说明:
browser.window_handles返回当前浏览器所有窗口的句柄列表,顺序对应窗口打开的先后browser.switch_to.window()用于切换到指定句柄的窗口- 切换窗口后必须等待页面加载完成(用
WebDriverWait等待关键元素),避免因页面未加载完成导致元素查找失败
内容的提问来源于stack exchange,提问作者johnny boto
相关产品推荐
相关产品推荐

