使用Selenium自动化展开动态下拉菜单并高效提取子分类链接


使用Selenium自动化展开动态下拉菜单并高效提取子分类链接

本教程详细阐述如何利用selenium处理动态网页中的下拉菜单,通过识别并迭代点击展开图标,实现所有子菜单的完全展开。随后,指导读者如何从展开后的页面结构中精准提取所需的子分类链接,并提供完整的python代码示例及实用的注意事项,旨在提升网页数据抓取的效率和准确性。

使用Selenium自动化展开动态下拉菜单并高效提取子分类链接

在进行网页数据抓取时,经常会遇到动态加载或隐藏在下拉菜单中的内容。这些内容需要通过用户交互(如点击)才能显示。本教程将以一个具体案例为基础,详细讲解如何使用Python和Selenium库来自动化展开网页中的所有动态下拉菜单,并从中提取所需的子分类链接。

1. 环境准备与WebDriver初始化

首先,确保你已安装Python和Selenium库,并且已配置好Chrome WebDriver。

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep # 引入sleep模块,用于在必要时等待页面加载

# 定义目标URL
URL = "https://albiononline2d.com/en/item"

# 初始化Chrome WebDriver
# 如果WebDriver不在系统PATH中,需要指定路径,例如:
# from selenium.webdriver.chrome.service import Service
# service = Service(executable_path='/path/to/chromedriver')
# driver = webdriver.Chrome(service=service)

driver = webdriver.Chrome()

# 设置隐式等待,在查找元素时,如果元素未立即出现,WebDriver会等待指定时间
driver.implicitly_wait(5) # 增加隐式等待时间,以适应更复杂的加载情况

# 导航到目标网页
driver.get(URL)

# 初始化ActionChains,虽然在此特定解决方案中未直接使用,但在处理复杂交互时非常有用
action = webdriver.ActionChains(driver)

说明:

Manus Manus

全球首款通用型AI Agent,可以将你的想法转化为行动。

Manus 250 查看详情 Manus
  • implicitly_wait(5):设置了一个全局的隐式等待时间。这意味着当Selenium尝试查找一个元素但未能立即找到时,它会等待最多5秒钟,直到元素出现。这对于处理页面加载延迟非常有用。
  • ActionChains:用于执行一系列复杂的低级交互,如鼠标悬停、拖放等。在本案例中,我们主要通过直接点击元素来展开下拉菜单,所以其作用不大,但保留作为通用实践。

2. 识别并展开所有动态下拉菜单

目标网页的下拉菜单通过点击一个“加号”图标(ion-plus-round)来展开。这些图标在展开后会消失或变为“减号”图标。为了确保所有下拉菜单都被展开,我们需要一个迭代的策略。

# 查找所有表示下拉菜单展开的“加号”图标
# 这些图标具有特定的CSS类:'icon expand-icon ion-plus-round'
# 使用CSS选择器定位这些元素
pluses = driver.find_elements(By.CSS_SELECTOR, 'span[class="icon expand-icon ion-plus-round"]')

# 循环点击所有“加号”图标,直到所有下拉菜单展开
# 这里的策略是:每次循环都重新查找所有“加号”图标,并点击第一个
# 这是因为每次点击后,页面上的“加号”图标列表会动态更新(被点击的会消失或变化)
for i in range(len(pluses)):
    # 每次迭代重新查找当前页面上所有未展开的“加号”图标
    # 这样做可以确保我们总能点击到当前可见的、需要展开的第一个图标
    current_pluses = driver.find_elements(By.CSS_SELECTOR, 'span[class="icon expand-icon ion-plus-round"]')

    # 如果没有找到任何“加号”图标,说明所有菜单都已展开,可以跳出循环
    if not current_pluses:
        break

    # 点击当前找到的第一个“加号”图标
    current_pluses[0].click()

    # 增加短暂的等待,确保页面有时间响应点击事件并更新DOM
    # 对于某些加载较慢的页面,这可以提高稳定性
    sleep(0.5) 

说明:

  • driver.find_elements(By.CSS_SELECTOR, 'span[class="icon expand-icon ion-plus-round"]'):使用CSS选择器来定位所有带有特定类名的元素。CSS选择器是一种强大且灵活的元素定位方式。
  • 循环中的current_pluses = driver.find_elements(...):这是解决动态元素列表的关键。每次点击后,页面的DOM结构会发生变化,原始的pluses列表可能不再有效(Stale Element Reference Exception)。通过在每次迭代时重新查找元素,我们确保始终操作的是当前最新的、有效的元素。
  • current_pluses[0].click():每次点击列表中的第一个“加号”图标。由于每次点击都会减少页面上“加号”图标的数量,这个操作会依次展开所有未展开的菜单。
  • sleep(0.5):虽然implicitly_wait处理了元素查找的等待,但有时页面更新DOM需要额外的时间,或者有动画效果,一个短暂的硬性等待可以增加脚本的稳定性。

3. 提取子分类链接

在所有下拉菜单展开后,整个页面的结构已经稳定,我们可以开始提取子分类的href链接。

# 找到包含所有分类和子分类链接的父容器
# 根据页面结构,这个容器是第一个class为'list-group'的元素
item_categories_container = driver.find_elements(By.CLASS_NAME, 'list-group')[0]

# 在这个容器内查找所有的<a>标签(即所有链接)
all_links = item_categories_container.find_elements(By.TAG_NAME, 'a')

# 过滤并存储子分类链接
subcat_links = []
for link_element in all_links:
    href = link_element.get_attribute('href')
    # 判断链接是否包含“subcat”字符串,以识别子分类链接
    if href and 'subcat' in href:
        subcat_links.append(href)

# 打印提取到的子分类链接
print("提取到的子分类链接:")
for link in subcat_links:
    print(link)

# 关闭浏览器
driver.quit()

说明:

  • driver.find_elements(By.CLASS_NAME, 'list-group')[0]:定位到主要的列表组容器。通常情况下,如果页面上有多个相同类名的元素,需要根据实际情况选择正确的索引。
  • item_categories_container.find_elements(By.TAG_NAME, 'a'):在指定的父容器内部查找所有标签。这是一个重要的优化,可以限制查找范围,提高效率和准确性。
  • link_element.get_attribute('href'):获取标签的href属性值,即链接地址。
  • if href and 'subcat' in href::通过检查href属性中是否包含特定字符串(如“subcat”)来筛选出所需的子分类链接。这是一个常见的筛选策略,可以根据实际链接结构进行调整。

4. 完整代码示例

将以上所有步骤整合,得到一个完整的自动化脚本:

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 定义目标URL
URL = "https://albiononline2d.com/en/item"

# 初始化Chrome WebDriver
driver = webdriver.Chrome()
driver.implicitly_wait(5) # 设置隐式等待时间
driver.get(URL)

# ----------------------------------------------------------------------
# 步骤1: 识别并展开所有动态下拉菜单
# ----------------------------------------------------------------------
# 查找所有表示下拉菜单展开的“加号”图标
pluses = driver.find_elements(By.CSS_SELECTOR, 'span[class="icon expand-icon ion-plus-round"]')

# 循环点击所有“加号”图标
for i in range(len(pluses)):
    current_pluses = driver.find_elements(By.CSS_SELECTOR, 'span[class="icon expand-icon ion-plus-round"]')
    if not current_pluses:
        break
    current_pluses[0].click()
    sleep(0.5) # 短暂等待,确保DOM更新

# ----------------------------------------------------------------------
# 

以上就是使用Selenium自动化展开动态下拉菜单并高效提取子分类链接的详细内容,更多请关注其它相关文章!


# python  # seo查询是什么意思  # 网站建设页面背景图  # 阳曲推广品牌营销  # 麻山网站推广公司有哪些  # 是一种  # 的是  # 隐式  # 如何使用  # 迭代  # 这是  # 所需  # 选择器  # css  # go  # 浏览器  # app  # ai  # webdriver  # css选择器  # 点击事件  # 第一个  # 加载  # 企业网站建设的方案  # 曲江全网营销推广  # 关键词快速排名就选m火10星  # 临西网站优化推广  # 服装营销推广广告语  # 潜山网站优化报价表模板 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  Mac hosts文件在哪里_Mac修改hosts文件详细教程  盲鳗善于分泌黏液猜猜主要用来做什么  C++二维数组动态分配方法_C++指针与数组内存布局  163邮箱登录入口官网 163.com邮箱登录入口  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  Safari浏览器自动填表功能失效怎么办 Safari表单管理修复  Django模型动态关联检查:高效管理复杂关系  《下一站江湖2》大雪山加入方法  以下哪一项是古代兵书三十六计中的计谋  汽水音乐网页端访问 汽水音乐官方网页直达  知音漫客官网首页入口_知音漫客热门漫画推荐  优酷下载视频的清晰度怎么选_优酷缓存清晰度设置与选择指南  宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?  拷贝漫画2025网页版入口 拷贝漫画官网免费看全集  《洛克王国:世界》国家队搭配攻略  支付宝网页版在线入口 支付宝官网电脑登录入口  国际经济与贸易就业方向解析  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程  QQ阅读小说搜索入口地址_QQ阅读小说搜索入口地址搜索在线阅读  5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  J*aScript与HTML元素交互:图片点击事件与链接处理教程  yy漫画官方网站登录入口_yy漫画在线阅读页面地址  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  C++ virtual析构函数作用_C++基类虚析构函数防止内存泄漏  Golang如何使用log记录日志信息_Golang log日志记录方法总结  《偃武》甘宁技能详解  windows10怎么设置电源按钮_windows10按下电源键功能修改  在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示  HTML Canvas文本样式定制指南:解决外部字体加载与应用难题  《大周列国志》皇帝律令功能介绍  2025SNH48年度青春盛典门票价格及购买方式  Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  英雄联盟争者留名活动介绍  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留  iPhone 15 Pro如何查看存储空间占用_iPhone 15 Pro存储空间查看教程  安居客移动经纪人怎么设置自动回复?-安居客移动经纪人设置自动回复的方法  三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  优化响应式标题底部边框:CSS实现技巧与最佳实践  口腔诊所管理软件推荐  邦丰播放器频道搜索设置  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口 

 2025-11-15

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.