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

如何用if/else语句捕获Selenium网页抓取的无效输入握手失败错误并重试?

解决方案:捕获错误并循环获取有效输入

当然可以通过循环+异常捕获来处理无效输入的情况,不仅能捕获握手失败的错误,还能处理输入格式错误、页面加载超时、目标元素不存在等问题,确保用户输入有效内容后才完成抓取。

修改后的完整代码(带中文注释)

import re
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.common.exceptions import (
    TimeoutException,
    NoSuchElementException,
    WebDriverException,
    ValueError
)

trn_base_url = "https://tracker.gg/valorant/profile/riot/"

while True:
    try:
        # 获取用户输入并验证格式
        player_tag = input("请输入玩家名称+标签(格式示例:Eazy#Pzy):\n")
        # 检查输入是否包含且仅包含一个#
        if '#' not in player_tag or player_tag.count('#') != 1:
            raise ValueError("输入格式错误,必须包含且仅包含一个#分隔符")
        
        player_name, tag = player_tag.split('#')
        # 去除前后空格(避免用户输入多余空格)
        player_name = player_name.strip()
        tag = tag.strip()
        if not player_name or not tag:
            raise ValueError("玩家名称或标签不能为空")

        # 初始化浏览器
        driver = Chrome(executable_path='chromedriver.exe')
        driver.set_window_position(-10000, 0)
        
        # 构造目标URL并访问
        target_url = f"{trn_base_url}{player_name}%23{tag}"
        driver.get(target_url)

        # 获取段位元素,若不存在则判定为无效用户
        rank_element = driver.find_element(By.CLASS_NAME, "valorant-rank-bg")
        rank_text = rank_element.get_attribute('innerText').strip()

        # 成功获取数据,输出并退出循环
        print(f"该玩家的段位为:{rank_text}")
        driver.quit()
        break

    except ValueError as ve:
        # 处理输入格式错误
        print(f"⚠️ 输入错误:{ve},请重新输入。")
    except (TimeoutException, WebDriverException):
        # 处理握手失败、页面加载超时等网络/驱动错误
        print("⚠️ 握手失败或页面加载超时,请检查输入是否有效或网络状态后重新输入。")
        if 'driver' in locals():
            driver.quit()
    except NoSuchElementException:
        # 处理页面加载成功但找不到段位元素(无效用户)
        print("⚠️ 未找到该玩家信息,请确认输入的玩家名称和标签是否正确后重新输入。")
        if 'driver' in locals():
            driver.quit()
    except Exception as e:
        # 捕获其他未预见的错误
        print(f"⚠️ 发生未知错误:{str(e)},请重新尝试。")
        if 'driver' in locals():
            driver.quit()

关键改进点说明

  • 循环输入机制:用while True循环持续获取用户输入,直到成功抓取数据后通过break退出循环。
  • 前置输入验证:提前检查输入是否符合名称#标签的格式,避免后续字符串切割报错。
  • 多场景异常捕获:
    • ValueError:处理输入格式错误(无#、多个#、名称/标签为空)。
    • TimeoutException/WebDriverException:捕获握手失败、页面加载超时等网络或驱动层面的错误。
    • NoSuchElementException:捕获页面加载成功但目标元素不存在(即用户信息无效)的情况。
  • 资源自动清理:每次失败后关闭浏览器进程,避免残留未关闭的Chrome实例占用系统资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:45:42