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

求AppleScript中执行JS提取符合标题条件的DOM元素href的替代方案

嘿,我来帮你搞定这个AppleScript里的JavaScript代码优化,给你几个更简洁靠谱的替代方案,完全贴合你的需求👇

优化后的AppleScript + JavaScript实现方案

方案一:逻辑清晰的分步处理写法

这个方案把筛选和提取拆成明确的步骤,可读性更强,也更健壮:

tell application "Safari"
    open location "https://teespring.com/search?q=rocker"
    delay 5 -- 等待页面加载,可根据网络速度调整时长
    set theLinks to (do JavaScript "
        // 把所有.product_card元素转为数组
        Array.from(document.querySelectorAll('.product_card'))
            // 第一步:筛选出标题包含指定关键词的卡片
            .filter(card => {
                const titleElement = card.querySelector('.product_card__title');
                // 确保标题元素存在,且文本包含关键词(不区分大小写)
                return titleElement && /Rocker/gi.test(titleElement.textContent.trim());
            })
            // 第二步:从符合条件的卡片中提取目标链接
            .map(card => card.querySelector('.js-search-product-link').href)
            // 最后过滤掉可能出现的无效链接
            .filter(link => link)
    ")
end tell
return theLinks

方案二:用CSS选择器直接定位(更高效)

如果你的Safari版本支持现代CSS选择器,可以直接一步定位到目标链接,减少JS层面的遍历操作:

tell application "Safari"
    open location "https://teespring.com/search?q=rocker"
    delay 5
    set theLinks to (do JavaScript "
        // 直接用CSS选择器找到包含目标标题的卡片下的链接
        Array.from(document.querySelectorAll('.product_card:has(.product_card__title:contains(\"Rocker\")) .js-search-product-link'))
            .map(link => link.href)
    ")
end tell

小提示::contains()选择器在WebKit内核(Safari用的就是这个)中是支持的,但如果遇到兼容性问题,方案一的逻辑会更稳妥。

关键优化点说明

  • 用Array.from()替代Array.prototype.slice.call(),是ES6+的标准写法,语法更直观
  • 给标题文本加了trim(),避免前后空格干扰关键词匹配
  • 拆分filter和map步骤,让代码逻辑一目了然,后期维护也方便
  • 方案二通过CSS选择器直接缩小范围,执行效率更高

这两个方案都完美匹配你的需求:

  1. 精准检查.product_card下的.product_card__title是否包含指定搜索词
  2. 只提取对应卡片下.js-search-product-link的href链接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:57:46