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

如何用Selenium+Python点击指定网页的A-Z按钮?附报错及代码

修复Selenium代码实现A-Z按钮依次点击

看起来你这段Selenium代码确实有几个明显的问题,我来逐个帮你梳理并修复:

原代码的核心问题

  • 缺失webdriver导入:直接使用webdriver.Firefox()但没导入from selenium import webdriver,会导致找不到webdriver对象
  • 未定义alphabets变量:这是你遇到NameError: name 'alphabets' is not defined的直接原因,你需要先定位到页面上包含A-Z按钮的容器元素
  • 元素定位方法错误:find_element_by_tag_name('li')只会获取第一个li元素,应该用复数形式find_elements_by_tag_name('li')获取所有字母按钮
  • 循环逻辑混乱:element = element[elements]这行完全不符合逻辑,循环遍历的element已经是单个li元素,不需要额外索引
  • 子元素获取方式错误:Selenium元素没有children属性,应该用Selenium的官方定位方法获取可点击的按钮
  • 缺少页面等待:页面跳转后直接操作元素会因为加载未完成报错,需要添加显式等待

修正后的完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Firefox浏览器驱动
driver = webdriver.Firefox()
driver.maximize_window()

# 直接打开目标区域列表页面(跳过首页点击步骤,更高效)
url = 'http://architects-register.org.uk/list/regions'
driver.get(url)

try:
    # 显式等待字母按钮容器加载完成(通过页面源码的class定位)
    alphabet_container = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'alphabet'))
    )
    
    # 获取所有字母按钮的li元素
    letter_buttons = alphabet_container.find_elements(By.TAG_NAME, 'li')
    
    # 遍历每个字母按钮并执行点击
    for index, button in enumerate(letter_buttons):
        # 找到li中的a标签(实际可点击的元素)并等待可交互
        clickable_btn = WebDriverWait(driver, 5).until(
            EC.element_to_be_clickable(button.find_element(By.TAG_NAME, 'a'))
        )
        clickable_btn.click()
        
        # 等待目标页面加载完成(以区域列表表格为标志)
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, 'ctl00_ContentPlaceHolder1_gvCountries'))
        )
        
        # 若需要继续点击下一个字母,返回上一页并重新获取按钮列表(页面刷新后旧元素引用失效)
        if index != len(letter_buttons) - 1:
            driver.back()
            alphabet_container = WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.CLASS_NAME, 'alphabet'))
            )
            letter_buttons = alphabet_container.find_elements(By.TAG_NAME, 'li')
        
finally:
    # 无论操作是否成功,最终关闭浏览器释放资源
    driver.quit()

代码关键说明

  1. 直接跳转目标页面:跳过首页点击"UK Counties"的步骤,直接访问区域列表页,减少不必要的操作
  2. 显式等待机制:所有元素操作前都等待元素加载完成/可交互,避免因页面加载延迟导致的报错
  3. 元素重新定位:每次返回页面后重新获取字母按钮列表,因为页面刷新后之前的元素引用会失效
  4. 资源安全释放:使用try-finally确保浏览器最终会关闭,避免残留驱动进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:27:23