import re
from typing import *
try:
from xbot.app.logging import trace as print
except:
from xbot import print
from xbot_ai import *
def extract_and_sum_dollar_values(browser, primary_section1):
"""
title: 提取并计算美元数值总和
description: 从%primary_section1%中提取所有以$开头的数值(排除删除线数值),并相加返回数值格式的总和
inputs:
- browser (WebBrowser): 目标网页
- primary_section1 (Selector): `块元素_s-item__details-section--primary`,uuid: s3ms9k75
outputs:
- total_sum (float): 所有以$开头的数值总和
"""
def _extract_dollar_values_from_element(element):
"""内部函数:从元素中提取所有以$开头的数值,排除删除线数值"""
html_content = element.get_html()
text_content = element.get_text()
# 提取所有以$开头的数值
dollar_pattern = r'\$(\d+(?:\.\d+)?)'
all_matches = re.findall(dollar_pattern, text_content)
all_values = [float(match) for match in all_matches]
# 查找删除线标签中的数值并排除
strikethrough_pattern = r'<span class="STRIKETHROUGH">[^<]*\$(\d+(?:\.\d+)?)[^<]*</span>'
strikethrough_matches = re.findall(strikethrough_pattern, html_content)
strikethrough_values = [float(match) for match in strikethrough_matches]
# 过滤掉删除线中的数值
filtered_values = []
for value in all_values:
if value not in strikethrough_values:
filtered_values.append(value)
return filtered_values, strikethrough_values
total_sum = 0.0
print("1. 检查块元素是否存在")
try:
elements = browser.find_all_by_xpath(primary_section1, timeout=3)
if elements:
print(f" a. 块元素存在,共找到 {len(elements)} 个")
element = elements[0]
values, excluded_values = _extract_dollar_values_from_element(element)
print(f" - 提取到的有效数值: {values}")
print(f" - 排除的删除线数值: {excluded_values}")
total_sum = sum(values)
else:
print(" a. 块元素不存在")
raise Exception("页面上未找到指定的块元素")
except Exception as e:
print(f" a. 块元素查找失败: {str(e)}")
raise Exception(f"无法找到块元素: {str(e)}")
print(f"2. 计算总和: {total_sum}")
return total_sum