如何用CSS选择器定位第一个el-table?Selenium定位失败求助
问题定位失败原因及解决方案
核心问题分析
- Vue的
v-if是条件渲染指令,当条件满足时元素才会被渲染到DOM中,渲染完成后该v-if属性不会保留在最终的HTML结构里,所以你用div.el-table-box[v-if="!specialAnnounce"]这类依赖v-if属性的选择器根本无法找到目标元素。 - 你的代码中混合了直接查找和显式等待逻辑,且显式等待使用的选择器
div.el-table-box[v-if$='!specialAnnounce']同样因上述原因无效,导致超时异常。
可行解决方案
方案一:利用元素结构位置区分
第一个el-table-box是顶级div(未被嵌套在v-if="specialAnnounce"的容器内),第二个则被包裹在div[v-if="specialAnnounce"]中,可通过结构选择器定位:
# 定位第一个el-table-box下的el-table first_table = wait.until(EC.visibility_of_element_located( (By.CSS_SELECTOR, "div.el-table-box:not(div[v-if='specialAnnounce'] > div.el-table-box) el-table") ))
若页面中只有这两个el-table-box,也可直接用:first-of-type简化选择器:
first_table = wait.until(EC.visibility_of_element_located( (By.CSS_SELECTOR, "div.el-table-box:first-of-type el-table") ))
方案二:通过元素内部特征定位
第一个表格包含secCode(代码)列,第二个表格没有该列,可通过此特征区分:
# 通过包含代码列的特征定位第一个表格 first_table = wait.until(EC.visibility_of_element_located( (By.CSS_SELECTOR, "el-table:has(el-table-column[prop='secCode'])") ))
注意::has()选择器要求Chrome浏览器版本101及以上。
方案三:优化页面加载等待与浏览器配置
- 无头模式下需设置窗口大小,否则部分元素可能因视口问题不渲染;同时可适当延长等待时间:
chrome_options.add_argument("--window-size=1920,1080") # 添加窗口大小配置 wait = WebDriverWait(driver, 15) # 延长等待时间至15秒
完整修正代码示例
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 配置Chrome选项 chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--window-size=1920,1080") # 新增窗口大小配置 chromedriver_path = '/path/to/chromedriver' driver = webdriver.Chrome(executable_path=chromedriver_path, options=chrome_options) url = "http://www.cninfo.com.cn/new/commonUrl/pageOfSearch?url=disclosure/list/search" driver.get(url) # 等待第一个表格加载完成 wait = WebDriverWait(driver, 15) first_table = wait.until(EC.visibility_of_element_located( (By.CSS_SELECTOR, "div.el-table-box:first-of-type el-table") )) # 执行后续操作... driver.quit()
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

