我来帮你修改代码。这个问题出现在处理 FedEx 多件货物信息的部分。让我们修改 process_fedex 函数中处理多件货物的部分,使用集合(set)来去除重复信息。以下是修改后的代码片段:

python

def process_fedex(driver, tracking_number):
    if len(tracking_number) == 10:
        tracking_url = f"https://www.fedex.com/fedextrack/?trknbr={tracking_number}&trkqual=~{tracking_number}~FDFR"
    else:
        tracking_url = f"https://www.fedex.com/fedextrack/?trknbr={tracking_number}&trkqual=12028~{tracking_number}~FDEG"
        print(f"访问FedEx追踪URL: {tracking_url}")
        
    if load_page(driver, tracking_url):
        page_html = driver.page_source
        soup = BeautifulSoup(page_html, 'html.parser')

        # 检查是否存在多件货物
        piece_shipment = soup.find('h2', string=lambda text: text and 'Piece Shipment' in text)
        
        if piece_shipment:
            # 存在多件货物
            packages = soup.find_all('tr', class_='fdx-c-table__tbody__tr')
            all_delivered = True
            undelivered_packages = set()  # 使用集合而不是列表

            for package in packages:
                tracking_link = package.find('a', class_='fdx-u-color--blue')
                if tracking_link:
                    package_tracking_number = tracking_link.text.strip()
                    status_element = package.find('div', class_='shipment-status__key')
                    if status_element:
                        status = status_element.text.strip()
                        if status != 'Delivered':
                            all_delivered = False
                            undelivered_packages.add(f"{package_tracking_number}: {status}")

            if all_delivered:
                other_packages_info = "该货件的其它包裹全部送达"
            else:
                other_packages_info = ", ".join(undelivered_packages)  # 转换集合为字符串
        else:
            # 不存在多件货物
            other_packages_info = "否"

        # 获取主包裹的状态信息
        status_info = extract_delivered_time_fedex(page_html)

        return status_info, tracking_url, other_packages_info
    else:
        return "加载FedEx页面失败", None, "否"

主要的改动是:

  1. undelivered_packages 从列表改为集合 (set)

  2. 使用 add 方法而不是 append 来添加包裹信息

  3. 在最后转换为字符串时,集合会自动去除重复的信息

这样修改后,即使页面上有重复的信息,最终输出的结果也只会包含一份唯一的信息。比如对于你的例子,现在应该只会输出一次:

txt

779303582872 (master): On the way, 779303582883: Delivery updated, 779303582894: Delivery updated, 779303582909: Delivery updated

claude-3-5-sonnet-20240620