You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合find_all与find_elements_by_xpath提取并筛选指定页面元素?

解决eBay元素筛选问题:结合正则属性匹配与文本关键词过滤

方案1:纯Selenium用XPath一步完成筛选

直接通过XPath同时匹配data-test-id前缀和目标关键词(不区分大小写),无需分步处理:

核心XPath语句

//span[starts-with(@data-test-id, 'fdbk-item-') and (contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'mirror') or contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'tray') or contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'ceramic'))]
  • starts-with(@data-test-id, 'fdbk-item-'):匹配以fdbk-item-开头的属性值
  • translate(text(), 大写字母集, 小写字母集):将文本统一转为小写,实现不区分大小写匹配
  • contains(...):检查文本是否包含目标关键词

完整代码示例

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("你的eBay目标链接")

# 直接定位符合条件的元素
target_spans = driver.find_elements_by_xpath("//span[starts-with(@data-test-id, 'fdbk-item-') and (contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'mirror') or contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'tray') or contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'ceramic'))]")

# 提取并打印结果文本
for span in target_spans:
    print(span.text.strip())

driver.quit()

方案2:BeautifulSoup提取后再筛选

如果已经完成第一步的BeautifulSoup提取,可以直接在Python层面做文本过滤:

from bs4 import BeautifulSoup
import requests

url = "你的eBay目标链接"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 第一步:提取符合data-test-id规则的span元素
raw_spans = soup.find_all(
    "span",
    attrs={"data-test-id": lambda x: x and x.startswith("fdbk-item-")}
)

# 第二步:筛选包含目标关键词的元素(不区分大小写)
target_keywords = {"mirror", "tray", "ceramic"}
filtered_spans = []
for span in raw_spans:
    span_text = span.get_text(strip=True).lower()
    if any(keyword in span_text for keyword in target_keywords):
        filtered_spans.append(span)

# 输出结果
for span in filtered_spans:
    print(span.get_text().strip())

方案3:Selenium处理动态页面 + BeautifulSoup筛选

如果页面是动态加载的(需要Selenium渲染),可以先获取渲染后的源码,再用BeautifulSoup处理:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome()
driver.get("你的eBay目标链接")

# 获取渲染后的页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

# 后续筛选逻辑同方案2
raw_spans = soup.find_all(
    "span",
    attrs={"data-test-id": lambda x: x and x.startswith("fdbk-item-")}
)
target_keywords = {"mirror", "tray", "ceramic"}
filtered_spans = []
for span in raw_spans:
    span_text = span.get_text(strip=True).lower()
    if any(keyword in span_text for keyword in target_keywords):
        filtered_spans.append(span)

for span in filtered_spans:
    print(span.get_text().strip())

driver.quit()

内容的提问来源于stack exchange,提问作者ykpcat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:50:25