Python/Selenium如何提取fade模态框中的文本 爬取演讲者个人简介
实现演讲者简介提取的方案
- 你之前直接拆分整个区域文本的写法很容易出现信息和人员对应错位的问题,建议先定位到每个独立的演讲者可点击卡片,逐个处理,示例代码基于Selenium实现:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 初始化等待对象,最长等待10秒 wait = WebDriverWait(driver, 10) # 先获取所有演讲者的可点击卡片元素,替换选择器为你实际页面匹配的规则 speaker_cards = driver.find_elements_by_xpath("//*[@id='speakers']//div[contains(@class,'speaker-card')]") speaker_info_list = [] for index, card in enumerate(speaker_cards): # 先提取当前卡片的职位、公司信息,和之前的逻辑对齐 base_info = card.text.split('\n') position = base_info[0] if len(base_info)>=1 else '' company = base_info[1] if len(base_info)>=2 else '' # 滚动到卡片可见,避免视口外点击失效 driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", card) # 点击触发模态框,若原生点击失效可替换为JS点击 try: card.click() except: driver.execute_script("arguments[0].click();", card) # 等待模态框渲染完成,提取简介,替换选择器为实际页面简介元素的定位规则 try: bio_ele = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@class,'modal.show')]//div[contains(@class,'speaker-bio')]"))) bio = bio_ele.text.strip() except: bio = '' # 存储当前人员的所有信息 speaker_info_list.append({ 'position': position, 'company': company, 'bio': bio }) # 关闭模态框,等待完全消失后再处理下一个 close_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class,'modal.show')]//button[contains(@class,'close')]"))) close_btn.click() wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ".modal.show"))) - 注意事项:
- 代码里的元素定位选择器需要根据你实际页面的DOM结构调整,只要能匹配到对应的卡片、简介元素、关闭按钮即可
- 加了简单的异常捕获逻辑,避免个别元素加载异常导致整个爬取中断,你可以根据自己的需求调整异常处理规则
- 显式等待要匹配模态框的fade动画状态,不要用强制sleep,能大幅提升爬取效率和稳定性
内容的提问来源于stack exchange,提问作者Boomshakalaka
相关产品推荐
相关产品推荐

