/** * 文件:selectors.ts * 功能:集中管理小红书发布流程相关 DOM 选择器。 * * 来源:用户提供的步骤截图(STEP1 / STEP21 / STEP22 / STEP31)。 * 分组:入口 / 发布Tab / 视频 / 图文。 * 目标:统一引用、便于维护、减少硬编码分散。 * * 改版策略建议: * - 每个关键操作保留多个候选 selector(后续可扩展为数组兜底)。 * - 可结合 querySelectorAll + 模糊匹配文本进一步增强稳健性。 */ export const XHS_SELECTORS = { // STEP 1 入口区域(选择发布类型) ENTRY: { PUBLISH_VIDEO_BUTTON: 'div.publish-video .btn', VIDEO_CARD_IMAGE: 'div.group-list .publish-card:nth-child(1) .image', IMAGE_CARD_IMAGE: 'div.group-list .publish-card:nth-child(2) .image' }, // STEP 21 发布笔记 Tab 区域(主入口) PUBLISH_TAB: { PUBLISH_VIDEO_BUTTON: 'div.publish-video .btn', // 入口按钮(同上) TAB_VIDEO: 'div.outarea.upload-c .creator-tab:nth-child(1)', TAB_IMAGE: 'div.outarea.upload-c .creator-tab:nth-child(3)', UPLOAD_BUTTON: 'div.outarea.upload-c .upload-content button' }, // STEP 22 上传视频并发布 VIDEO: { // 上传结果 / 封面区域 UPLOAD_SUCCESS_STAGE: '.cover-container .stage div:first-child', // 需检测包含文字“上传成功” // 文本与输入区域 TITLE_INPUT: '.titleInput .d-text', CONTENT_EDITOR: '#quillEditor.ql-editor', TOPIC_BUTTON: '#topicBtn', // 扩展功能(插件 / 位置等) LOCATION_PLACEHOLDER: '.media-extension .plugin:nth-child(2) .d-select-placeholder', LOCATION_DESCRIPTION: '.media-settings>div>div:nth-child(2) .d-select-description', // 发布方式(立即 / 定时) RADIO_IMMEDIATE: '.el-radio-group label:nth-child(1) input', RADIO_SCHEDULE: '.el-radio-group label:nth-child(2) input', SCHEDULE_TIME_INPUT: '.el-radio-group .date-picker input', // 例如:2025-06-21 15:14 // 发布按钮 PUBLISH_BUTTON: '.publishBtn' }, // STEP 31 上传图片(图文)并发布 IMAGE: { IMAGE_UPLOAD_ENTRY: '.publish-c .media-area-new .img-upload-area .entry', TITLE_INPUT: '.titleInput .d-text', CONTENT_EDITOR: '#quillEditor .ql-editor', TOPIC_BUTTON: '#topicBtn', LOCATION_PLACEHOLDER: '.media-extension .plugin:nth-child(2) .d-select-placeholder', LOCATION_DESCRIPTION: '.media-settings>div>div:nth-child(2) .d-select-description', RADIO_IMMEDIATE: '.el-radio-group label:nth-child(1) input', RADIO_SCHEDULE: '.el-radio-group label:nth-child(2) input', SCHEDULE_TIME_INPUT: '.el-radio-group .date-picker input', PUBLISH_BUTTON: '.publishBtn' } } as const; export type XiaohongshuSelectorGroup = typeof XHS_SELECTORS;