支持小红书自动发布、自动评论、自动检索的 Skill。支持 OpenClaw、Codex、CC 等
This report summarizes scanner evidence for white0dew/XiaohongshuSkills, a Python project with 3,491 GitHub stars. SynthScan examined 8,458 lines of code across 16 source files, recording 251 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 78.1 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 68 finding(s).
Are imports declared and package/API names verified? 110 finding(s).
Are wrappers, guards, and repeated structures necessary? 108 finding(s).
Which changes need focused human review? 251 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 251 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | scripts/cdp_publish.py | 1962 | if (!obj || typeof obj !== "object") { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 1963 | return null; | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 1967 | if (value !== undefined && value !== null && String(value).trim()) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 1971 | return null; | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 1976 | let userNode = null; | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 1979 | while (queue.length && scanCount < 2400) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 1982 | if (!node || typeof node !== "object") { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2000 | if (nameVal && (idVal || avatarVal)) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2008 | if (item && typeof item === "object") { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2009 | queue.push(item); | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2017 | if (value && typeof value === "object") { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2018 | queue.push(value); | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2037 | if (!(node instanceof HTMLElement) || node.offsetParent === null) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2040 | const text = normalize(node.innerText || node.textContent); | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2041 | if (text && text.length <= 40) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2042 | statTexts.push(text); | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2097 | return null; | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2103 | return null; | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2109 | return null; | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2114 | url: parsed.toString(), | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2316 | containers.push(node); | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2323 | let best = null; | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2331 | const text = normalize(container.innerText || container.textContent); | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2336 | if (targetId && id && id === targetId) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2339 | if (targetAuthor && author && author.includes(targetAuthor)) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2342 | if (targetSnippet && text && text.includes(targetSnippet)) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2345 | if (!best || score > best.score) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2451 | if (!(el instanceof HTMLButtonElement) || el.offsetParent === null) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2458 | if (r.width < 8 || r.height < 8) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2466 | if (!(button instanceof HTMLButtonElement) || button.offsetParent === null) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2926 | if (!(el instanceof HTMLElement) || el.offsetParent === null) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2930 | if (r.width < 8 || r.height < 8) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2935 | return null; | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2961 | if (!(el instanceof HTMLButtonElement) || el.offsetParent === null) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2968 | if (r.width < 8 || r.height < 8) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 2976 | if (!(button instanceof HTMLButtonElement) || button.offsetParent === null) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 3035 | if (node.offsetParent === null) { | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 3042 | candidates.push(node); | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 3047 | const text = (node.innerText || node.textContent || "") | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 3511 | fuzzyKeywords.push('图文', '上传图文'); | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 3514 | fuzzyKeywords.push('视频', '上传视频'); | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 3523 | if (keyword && t.indexOf(keyword) !== -1) {{ | CODE |
| HIGH⚡ | scripts/cdp_publish.py | 4010 | return null; | CODE |
| HIGH | scripts/cdp_publish.py | 919 | if (node.offsetParent === null) {{ | CODE |
| HIGH | scripts/cdp_publish.py | 928 | if (document.body && containsKeyword(document.body.innerText)) {{ | CODE |
| HIGH | scripts/cdp_publish.py | 1080 | const src = node instanceof HTMLImageElement ? (node.currentSrc || node.src || "") : ""; | CODE |
| HIGH | scripts/cdp_publish.py | 1083 | node.parentElement ? (node.parentElement.innerText || node.parentElement.textContent) : "" | CODE |
| HIGH | scripts/cdp_publish.py | 1182 | if (node.offsetParent === null) {{ | CODE |
| HIGH | scripts/cdp_publish.py | 1186 | return rect.width >= 8 && rect.height >= 8; | CODE |
| HIGH | scripts/cdp_publish.py | 1197 | let inputEl = null; | CODE |
| HIGH | scripts/cdp_publish.py | 1201 | if (!(node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement)) {{ | CODE |
| HIGH | scripts/cdp_publish.py | 1224 | if (descriptor && typeof descriptor.set === "function") {{ | CODE |
| HIGH | scripts/cdp_publish.py | 1564 | const text = normalize(node.innerText || node.textContent); | CODE |
| HIGH | scripts/cdp_publish.py | 1584 | const text = normalize(node.innerText || node.textContent); | CODE |
| HIGH | scripts/cdp_publish.py | 1607 | const text = normalize(node.innerText || node.textContent).toUpperCase(); | CODE |
| HIGH | scripts/cdp_publish.py | 1625 | scroll_top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0 | CODE |
| HIGH | scripts/cdp_publish.py | 1736 | const text = normalize(node.textContent || node.innerText); | CODE |
| HIGH | scripts/cdp_publish.py | 1755 | if ({threshold} > 0 && match && Number.parseInt(match[1], 10) > {threshold}) {{ | CODE |
| HIGH | scripts/cdp_publish.py | 2153 | notes.push({ | CODE |
| HIGH | scripts/cdp_publish.py | 2254 | if (value && normalize(value)) { | CODE |
| 47 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/chrome_launcher.py | 209 | except Exception: | CODE |
| HIGH | scripts/chrome_launcher.py | 244 | except Exception: | CODE |
| HIGH | scripts/chrome_launcher.py | 205 | except Exception: | CODE |
| HIGH | scripts/chrome_launcher.py | 224 | except Exception: | CODE |
| HIGH | scripts/image_downloader.py | 176 | except OSError: | CODE |
| HIGH | scripts/run_lock.py | 44 | except Exception: | CODE |
| HIGH | scripts/run_lock.py | 64 | except FileNotFoundError: | CODE |
| HIGH | scripts/run_lock.py | 121 | except FileNotFoundError: | CODE |
| HIGH | scripts/run_lock.py | 123 | except OSError: | CODE |
| HIGH | scripts/account_manager.py | 47 | except (json.JSONDecodeError, IOError): | CODE |
| HIGH | scripts/account_manager.py | 196 | except Exception: | CODE |
| HIGH | scripts/cdp_publish.py | 73 | except Exception: | CODE |
| HIGH | scripts/cdp_publish.py | 188 | except Exception: | CODE |
| HIGH | scripts/feed_explorer.py | 147 | except Exception: | CODE |
| HIGH | scripts/publish_pipeline.py | 61 | except Exception: | CODE |
| HIGH | scripts/publish_pipeline.py | 97 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/chrome_launcher.py | 205 | except Exception: | CODE |
| LOW | scripts/chrome_launcher.py | 209 | except Exception: | CODE |
| LOW | scripts/chrome_launcher.py | 221 | except Exception: | CODE |
| LOW | scripts/chrome_launcher.py | 224 | except Exception: | CODE |
| LOW | scripts/chrome_launcher.py | 244 | except Exception: | CODE |
| LOW | scripts/image_downloader.py | 163 | except Exception as e: | CODE |
| LOW | scripts/run_lock.py | 44 | except Exception: | CODE |
| LOW | scripts/account_manager.py | 196 | except Exception: | CODE |
| MEDIUM | scripts/account_manager.py | 275 | print(f"Error: Account '{args.name}' already exists.", file=sys.stderr) | CODE |
| MEDIUM | scripts/account_manager.py | 282 | print(f"Error: Cannot remove account '{args.name}'.", file=sys.stderr) | CODE |
| MEDIUM | scripts/account_manager.py | 294 | print(f"Error: Account '{args.name}' not found.", file=sys.stderr) | CODE |
| MEDIUM | scripts/account_manager.py | 301 | print(f"Error: Account '{args.name}' not found.", file=sys.stderr) | CODE |
| MEDIUM⚡ | scripts/cdp_publish.py | 4469 | print(f"Error: Account '{args.name}' already exists.", file=sys.stderr) | STRING |
| MEDIUM⚡ | scripts/cdp_publish.py | 4478 | print(f"Error: Cannot remove account '{args.name}'.", file=sys.stderr) | STRING |
| MEDIUM⚡ | scripts/cdp_publish.py | 4487 | print(f"Error: Account '{args.name}' not found.", file=sys.stderr) | STRING |
| LOW | scripts/cdp_publish.py | 73 | except Exception: | CODE |
| LOW | scripts/cdp_publish.py | 188 | except Exception: | CODE |
| LOW | scripts/cdp_publish.py | 212 | except Exception: | CODE |
| LOW | scripts/cdp_publish.py | 388 | except Exception: | CODE |
| LOW | scripts/cdp_publish.py | 502 | except Exception as e: | CODE |
| LOW | scripts/cdp_publish.py | 624 | except Exception as exc: | CODE |
| LOW | scripts/cdp_publish.py | 1400 | except Exception: | CODE |
| MEDIUM | scripts/cdp_publish.py | 4540 | print("Error: --content or --content-file required.", file=sys.stderr) | STRING |
| MEDIUM | scripts/cdp_publish.py | 4632 | print("Error: --content or --content-file required.", file=sys.stderr) | STRING |
| MEDIUM | scripts/cdp_publish.py | 4654 | print("Error: --content or --content-file required.", file=sys.stderr) | STRING |
| MEDIUM | scripts/cdp_publish.py | 4820 | print(f"Error: {e}", file=sys.stderr) | STRING |
| LOW | scripts/feed_explorer.py | 147 | except Exception: | CODE |
| LOW | scripts/publish_pipeline.py | 61 | except Exception: | CODE |
| LOW | scripts/publish_pipeline.py | 97 | except Exception: | CODE |
| MEDIUM | scripts/publish_pipeline.py | 174 | print(f"Error: {media_label} file not found: {file_path}", file=sys.stderr) | CODE |
| MEDIUM | scripts/publish_pipeline.py | 461 | print("Error: title is empty.", file=sys.stderr) | STRING |
| MEDIUM | scripts/publish_pipeline.py | 472 | print("Error: content is empty.", file=sys.stderr) | STRING |
| MEDIUM | scripts/publish_pipeline.py | 494 | print("Error: Failed to start Chrome.", file=sys.stderr) | STRING |
| MEDIUM | scripts/publish_pipeline.py | 533 | print(f"Error: {e}", file=sys.stderr) | STRING |
| MEDIUM | scripts/publish_pipeline.py | 550 | print("Error: Video download failed.", file=sys.stderr) | STRING |
| MEDIUM | scripts/publish_pipeline.py | 565 | print("Error: All image downloads failed.", file=sys.stderr) | STRING |
| MEDIUM | scripts/publish_pipeline.py | 590 | print(f"Error during form fill: {e}", file=sys.stderr) | STRING |
| MEDIUM | scripts/publish_pipeline.py | 610 | print(f"Error clicking publish: {e}", file=sys.stderr) | STRING |
| MEDIUM | scripts/publish_pipeline.py | 628 | print(f"Error: {e}", file=sys.stderr) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/account_manager.py | 219 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/account_manager.py | 221 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/cdp_publish.py | 1166 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | scripts/cdp_publish.py | 1168 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | scripts/cdp_publish.py | 93 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/cdp_publish.py | 95 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/cdp_publish.py | 486 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | scripts/cdp_publish.py | 488 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | scripts/cdp_publish.py | 584 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | scripts/cdp_publish.py | 586 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | scripts/cdp_publish.py | 858 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | scripts/cdp_publish.py | 860 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | scripts/cdp_publish.py | 4016 | # ------------------------------------------------------------------ | STRING |
| MEDIUM⚡ | scripts/cdp_publish.py | 4018 | # ------------------------------------------------------------------ | STRING |
| MEDIUM⚡ | scripts/cdp_publish.py | 4126 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | scripts/cdp_publish.py | 4128 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | scripts/cdp_publish.py | 3298 | # ------------------------------------------------------------------ | STRING |
| MEDIUM | scripts/cdp_publish.py | 3300 | # ------------------------------------------------------------------ | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/cdp_publish.py | 343 | def _prepare_upload_file_path(self, file_path: str) -> str: | CODE |
| LOW⚡ | scripts/cdp_publish.py | 349 | def _looks_like_windows_drive_path(self, file_path: str) -> bool: | CODE |
| LOW⚡ | scripts/cdp_publish.py | 357 | def _looks_like_windows_backslash_path(self, file_path: str) -> bool: | CODE |
| LOW⚡ | scripts/cdp_publish.py | 366 | def _should_preserve_upload_path(self, file_path: str) -> bool: | CODE |
| LOW⚡ | scripts/cdp_publish.py | 1170 | def _prepare_search_input_keyword(self, keyword: str) -> dict[str, Any]: | CODE |
| LOW | scripts/cdp_publish.py | 193 | def _build_search_filters_from_args(args) -> SearchFilters | None: | CODE |
| LOW | scripts/cdp_publish.py | 215 | def validate_schedule_post_time(dt_str: str | None) -> bool: | CODE |
| LOW | scripts/cdp_publish.py | 261 | def _map_note_infos_to_content_rows(note_infos: list[dict[str, Any]]) -> list[dict[str, Any]]: | CODE |
| LOW | scripts/cdp_publish.py | 640 | def _build_content_data_result( | CODE |
| LOW | scripts/cdp_publish.py | 679 | def _fetch_content_data_via_page_fetch( | CODE |
| LOW | scripts/cdp_publish.py | 896 | def _home_login_prompt_visible(self, keyword: str) -> bool: | CODE |
| LOW | scripts/cdp_publish.py | 1334 | def _capture_search_recommendations_via_network( | CODE |
| LOW | scripts/cdp_publish.py | 1518 | def _extract_feed_comments_state(self) -> dict[str, Any]: | CODE |
| LOW | scripts/cdp_publish.py | 2219 | def _activate_reply_target_for_comment( | CODE |
| LOW | scripts/cdp_publish.py | 2753 | def _check_feed_page_accessible(self): | CODE |
| LOW | scripts/cdp_publish.py | 3355 | def _find_content_editor_selector(self) -> str | None: | CODE |
| LOW | scripts/cdp_publish.py | 754 | def _capture_content_data_from_page_request( | STRING |
| LOW | scripts/cdp_publish.py | 1256 | def _extract_recommend_keywords_from_payload( | STRING |
| LOW | scripts/cdp_publish.py | 1638 | def _scroll_feed_comments_area( | STRING |
| LOW | scripts/cdp_publish.py | 1695 | def _click_more_reply_buttons( | STRING |
| LOW | scripts/cdp_publish.py | 1777 | def _load_feed_detail_comments( | STRING |
| LOW | scripts/cdp_publish.py | 2080 | def _extract_note_cards_from_profile_dom(self, limit: int) -> dict[str, Any]: | STRING |
| LOW | scripts/cdp_publish.py | 2499 | def _inspect_note_toggle_state( | STRING |
| LOW | scripts/cdp_publish.py | 3006 | def _schedule_click_notification_mentions_tab(self) -> str: | STRING |
| LOW | scripts/cdp_publish.py | 3080 | def _fetch_notification_mentions_via_page(self) -> dict[str, Any] | None: | STRING |
| LOW | scripts/cdp_publish.py | 3144 | def get_notification_mentions(self, wait_seconds: float = 18.0) -> dict[str, Any]: | STRING |
| LOW | scripts/cdp_publish.py | 3334 | def _wait_for_uploaded_images(self, expected_count: int, timeout_seconds: float = 60.0): | STRING |
| LOW | scripts/cdp_publish.py | 3473 | def _wait_for_publish_button_ready(self, timeout_seconds: float = VIDEO_PROCESS_TIMEOUT): | STRING |
| LOW | scripts/feed_explorer.py | 196 | def _wait_for_home_feeds_state(self): | CODE |
| LOW | scripts/feed_explorer.py | 356 | def _apply_filters_in_single_panel(self, option_values: list[str]) -> tuple[bool, str]: | CODE |
| LOW | scripts/feed_explorer.py | 403 | def _try_apply_filter_via_hover_mouse(self, filter_value: str) -> tuple[bool, str]: | CODE |
| LOW | scripts/feed_explorer.py | 450 | def _apply_single_filter_js_fallback(self, filter_value: str) -> dict[str, Any]: | CODE |
| LOW | scripts/feed_explorer.py | 321 | def _open_filter_panel_via_hover_mouse(self) -> tuple[bool, str]: | STRING |
| LOW | scripts/publish_pipeline.py | 130 | def _extract_topic_tags_from_last_line(content: str) -> tuple[str, list[str]]: | CODE |
| LOW | scripts/publish_pipeline.py | 159 | def _verify_local_files_exist( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/chrome_launcher.py | 182 | CODE | |
| LOW | scripts/account_manager.py | 223 | CODE | |
| LOW | scripts/cdp_publish.py | 4130 | CODE | |
| LOW | scripts/cdp_publish.py | 490 | CODE | |
| LOW | scripts/cdp_publish.py | 1256 | CODE | |
| LOW | scripts/cdp_publish.py | 1777 | CODE | |
| LOW | scripts/feed_explorer.py | 356 | CODE | |
| LOW | scripts/feed_explorer.py | 699 | CODE | |
| LOW | scripts/publish_pipeline.py | 307 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/cdp_publish.py | 4054 | # Step 1: Navigate to publish page | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4058 | # Step 2: Click '上传图文' tab | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4061 | # Step 3: Upload images (editor appears after upload) | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4064 | # Step 4: Fill title | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4067 | # Step 5: Fill content | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4070 | # Step 6: Set schedule publish time (if provided) | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4103 | # Step 1: Navigate to publish page | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4107 | # Step 2: Click '上传视频' tab | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4110 | # Step 3: Upload video and wait for processing | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4114 | # Step 4: Fill title | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4117 | # Step 5: Fill content | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/cdp_publish.py | 4054 | # Step 1: Navigate to publish page | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4058 | # Step 2: Click '上传图文' tab | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4061 | # Step 3: Upload images (editor appears after upload) | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4064 | # Step 4: Fill title | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4067 | # Step 5: Fill content | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4070 | # Step 6: Set schedule publish time (if provided) | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4103 | # Step 1: Navigate to publish page | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4107 | # Step 2: Click '上传视频' tab | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4110 | # Step 3: Upload video and wait for processing | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4114 | # Step 4: Fill title | STRING |
| LOW⚡ | scripts/cdp_publish.py | 4117 | # Step 5: Fill content | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/generate_star_history.py | 4 | CODE | |
| LOW | scripts/run_lock.py | 3 | CODE | |
| LOW | scripts/feed_explorer.py | 8 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/cdp_publish.py | 548 | # Create a new tab | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/cdp_publish.py | 879 | # Check if we got redirected to a login page | COMMENT |