使用Selenium时XPath定位失效,无法获取目标页面传真号码
解决Selenium无法抓取页面传真号码的问题
我尝试获取页面https://www.barreaunantes.fr/annuaire-des-avocats/stephanie-dreux/中的传真号码,但运行以下Selenium代码后没有得到任何结果:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support.select import Select PATH="C:\Program Files (x86)\chromedriver.exe" url='https://www.barreaunantes.fr/annuaire-des-avocats/stephanie-dreux/' driver =webdriver.Chrome(PATH) wait = WebDriverWait(driver, 20) driver.get(url) Fax = driver.find_element(By.XPATH, "//p//strong[contains(text(),'Fax : ')]").text print(Fax)
问题分析
- 元素定位偏差:原代码用XPATH定位
<strong>标签内包含Fax :的文本,但实际页面的传真信息可能不在这个标签结构里,或是文本格式、嵌套关系和预期不符。 - 未等待元素加载:虽然初始化了
WebDriverWait,但没有实际用它等待元素出现,页面可能还没加载完成就执行了定位操作。 - 动态加载影响:页面内容可能是AJAX动态加载的,直接定位会找不到元素。
修正后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC PATH="C:\Program Files (x86)\chromedriver.exe" url='https://www.barreaunantes.fr/annuaire-des-avocats/stephanie-dreux/' driver = webdriver.Chrome(PATH) wait = WebDriverWait(driver, 20) driver.get(url) try: # 等待包含传真信息的元素加载可见,调整XPATH适配实际页面结构 fax_container = wait.until(EC.visibility_of_element_located((By.XPATH, "//p[contains(text(), 'Fax')]"))) # 提取文本并拆分出传真号码 full_fax_text = fax_container.text fax_number = full_fax_text.split('Fax : ')[-1].strip() print(f"传真号码:{fax_number}") except Exception as e: print(f"获取失败:{str(e)}") finally: driver.quit()
关键修正点
- 用
expected_conditions的visibility_of_element_located等待元素加载完成,避免页面未就绪就执行定位。 - 调整XPATH定位到包含传真信息的父容器(比如
<p>标签),适配实际页面的HTML结构。 - 添加异常捕获,方便快速排查定位失败的原因。
- 最后关闭浏览器,释放资源。
额外排查建议
- 打开页面按F12调出开发者工具,搜索
Fax关键词,查看传真信息实际的HTML结构,确认正确的定位路径。 - 检查页面是否有iframe嵌套目标元素,若有需要先用
driver.switch_to.frame()切换到对应iframe再定位。 - 确认内容是否需要滚动页面或触发其他交互才会显示,若有则添加对应操作。
内容的提问来源于stack exchange,提问作者GX Mentor
相关产品推荐
相关产品推荐

