🌐 Make websites accessible for AI agents. Automate tasks online with ease.
This report presents the forensic synthetic code analysis of browser-use/browser-use, a Python project with 104,626 GitHub stars. SynthScan v2.0 examined 138,634 lines of code across 453 source files, recording 3310 pattern matches distributed across 24 syntactic categories. The overall adjusted score of 30.9 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 3310 distinct pattern matches across 24 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/ci/test_ai_step.py | 10 | async def test_execute_ai_step_basic(): | CODE |
| LOW | tests/ci/test_ai_step.py | 46 | async def test_execute_ai_step_with_screenshot(): | CODE |
| LOW | tests/ci/test_ai_step.py | 95 | async def test_execute_ai_step_error_handling(): | CODE |
| LOW | tests/ci/test_browser_use_skill_install_docs.py | 19 | def _fake_browser_harness_tools(tmp_path: Path, skill_text: str) -> Path: | CODE |
| LOW | tests/ci/test_browser_use_skill_install_docs.py | 48 | def test_docs_install_browser_use_skill_from_package_alias(): | CODE |
| LOW | tests/ci/test_browser_use_skill_install_docs.py | 59 | def test_browser_use_cli_installs_browser_harness_package_skill(tmp_path): | CODE |
| LOW | tests/ci/test_browser_use_skill_install_docs.py | 96 | def test_browser_use_cli_validates_destination_before_installing_harness(tmp_path): | CODE |
| LOW | tests/ci/test_screenshot_exclusion.py | 20 | def test_screenshot_excluded_with_use_vision_false(): | CODE |
| LOW | tests/ci/test_screenshot_exclusion.py | 34 | def test_screenshot_excluded_with_use_vision_true(): | CODE |
| LOW | tests/ci/test_screenshot_exclusion.py | 48 | def test_screenshot_included_with_use_vision_auto(): | CODE |
| LOW | tests/ci/test_screenshot_exclusion.py | 62 | def test_screenshot_excluded_with_custom_tools_and_use_vision_false(): | CODE |
| LOW | tests/ci/test_screenshot_exclusion.py | 89 | def test_screenshot_excluded_with_custom_tools_and_use_vision_true(): | CODE |
| LOW | tests/ci/test_screenshot_exclusion.py | 121 | def test_screenshot_included_with_custom_tools_and_use_vision_auto(): | CODE |
| LOW | tests/ci/test_screenshot_exclusion.py | 143 | def test_tools_exclude_action_method(): | CODE |
| LOW | tests/ci/test_screenshot_exclusion.py | 158 | def test_exclude_action_prevents_re_registration(): | CODE |
| LOW | tests/ci/test_action_record.py | 65 | async def test_start_stop_recording_produces_video(browser_session: BrowserSession, page_url: str, tmp_path: Path): | CODE |
| LOW | tests/ci/test_action_record.py | 94 | async def test_start_recording_twice_raises(browser_session: BrowserSession, tmp_path: Path): | CODE |
| LOW | tests/ci/test_action_record.py | 106 | async def test_stop_without_start_returns_none(browser_session: BrowserSession): | CODE |
| LOW | tests/ci/test_action_record.py | 112 | async def test_on_browser_connected_degrades_gracefully_when_recording_fails( | CODE |
| LOW | tests/ci/test_action_record.py | 134 | async def test_profile_record_video_dir_still_works(page_url: str, tmp_path: Path): | CODE |
| LOW⚡ | tests/ci/test_event_bus_resilience.py | 20 | def _tear_down_like_agent_close(bus: EventBus) -> None: | CODE |
| LOW⚡ | tests/ci/test_event_bus_resilience.py | 26 | def test_browser_session_uses_resilient_event_bus(): | CODE |
| LOW⚡ | tests/ci/test_event_bus_resilience.py | 32 | def test_resilient_event_bus_keeps_event_bus_name_prefix(): | CODE |
| LOW⚡ | tests/ci/test_event_bus_resilience.py | 39 | async def test_step_on_torn_down_bus_is_noop_not_assertion(): | CODE |
| LOW | tests/ci/test_event_bus_resilience.py | 52 | async def test_torn_down_bus_still_restarts_on_dispatch(): | CODE |
| LOW | tests/ci/test_event_bus_resilience.py | 72 | async def test_stock_event_bus_reproduces_the_crash(): | CODE |
| LOW | tests/ci/test_variable_substitution.py | 38 | def test_substitute_single_variable(mock_llm): | CODE |
| LOW | tests/ci/test_variable_substitution.py | 62 | def test_substitute_multiple_variables(mock_llm): | CODE |
| LOW | tests/ci/test_variable_substitution.py | 95 | def test_substitute_partial_variables(mock_llm): | CODE |
| LOW | tests/ci/test_variable_substitution.py | 121 | def test_substitute_nonexistent_variable(mock_llm): | CODE |
| LOW | tests/ci/test_variable_substitution.py | 145 | def test_substitute_in_nested_dict(mock_llm): | CODE |
| LOW | tests/ci/test_variable_substitution.py | 202 | def test_substitute_preserves_original_history(mock_llm): | CODE |
| LOW | tests/ci/test_variable_substitution.py | 227 | def test_substitute_empty_variables(mock_llm): | CODE |
| LOW | tests/ci/test_variable_substitution.py | 248 | def test_substitute_same_value_multiple_times(mock_llm): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 21 | async def test_ax_name_matching_succeeds_when_hash_fails(httpserver): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 157 | async def test_ax_name_matching_requires_same_node_type(httpserver): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 244 | def test_match_level_enum_includes_ax_name(): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 251 | async def test_ax_name_matching_before_attribute_matching(httpserver): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 366 | def test_is_menu_opener_step_detects_aria_haspopup(): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 408 | def test_is_menu_opener_step_detects_guidewire_toggle(): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 450 | def test_is_menu_opener_step_returns_false_for_regular_element(): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 492 | def test_is_menu_item_element_detects_role_menuitem(): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 515 | def test_is_menu_item_element_detects_guidewire_class(): | CODE |
| LOW | tests/ci/test_ax_name_matching.py | 538 | def test_is_menu_item_element_returns_false_for_regular_element(): | CODE |
| LOW⚡ | tests/ci/test_markdown_chunking.py | 16 | def test_short_content_single_chunk(self): | CODE |
| LOW⚡ | tests/ci/test_markdown_chunking.py | 207 | def test_start_from_char_past_end_returns_empty(self): | CODE |
| LOW⚡ | tests/ci/test_markdown_chunking.py | 212 | def test_start_from_char_zero_returns_all(self): | CODE |
| LOW⚡ | tests/ci/test_markdown_chunking.py | 221 | def test_overlap_lines_carry_context(self): | CODE |
| LOW⚡ | tests/ci/test_markdown_chunking.py | 251 | def test_single_oversized_block_allowed(self): | CODE |
| LOW⚡ | tests/ci/test_markdown_chunking.py | 268 | def test_large_table_produces_valid_chunks(self): | CODE |
| LOW⚡ | tests/ci/test_markdown_chunking.py | 285 | def test_table_without_thead_normalization(self): | CODE |
| LOW⚡ | tests/ci/test_markdown_chunking.py | 301 | async def test_table_without_thead_normalized_via_serializer(self, browser_session, httpserver: HTTPServer): | CODE |
| LOW | tests/ci/test_markdown_chunking.py | 31 | def test_chunk_offsets_cover_full_content(self): | CODE |
| LOW | tests/ci/test_markdown_chunking.py | 50 | def test_splits_at_header_boundary(self): | CODE |
| LOW | tests/ci/test_markdown_chunking.py | 67 | def test_header_preferred_split_moves_header_to_next_chunk(self): | CODE |
| LOW | tests/ci/test_markdown_chunking.py | 82 | def test_header_preferred_split_doesnt_create_tiny_chunks(self): | CODE |
| LOW | tests/ci/test_markdown_chunking.py | 100 | def test_code_fence_not_split(self): | CODE |
| LOW | tests/ci/test_markdown_chunking.py | 121 | def test_table_not_split_mid_row(self): | CODE |
| LOW | tests/ci/test_markdown_chunking.py | 139 | def test_table_header_in_overlap_for_continuation(self): | CODE |
| LOW | tests/ci/test_markdown_chunking.py | 155 | def test_table_header_carried_across_three_plus_chunks(self): | CODE |
| 1251 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/ci/evaluate_tasks.py | 105 | except Exception as browser_error: | CODE |
| LOW | tests/ci/evaluate_tasks.py | 118 | except Exception as agent_error: | CODE |
| LOW | tests/ci/evaluate_tasks.py | 137 | except Exception as llm_error: | CODE |
| LOW | tests/ci/evaluate_tasks.py | 187 | except Exception as e: | STRING |
| LOW | tests/ci/evaluate_tasks.py | 191 | except Exception: | STRING |
| LOW | tests/ci/evaluate_tasks.py | 269 | except Exception as e: | CODE |
| LOW | tests/ci/evaluate_tasks.py | 356 | except Exception as e: | CODE |
| LOW | tests/ci/interactions/test_dropdown_native.py | 515 | except Exception as e: | CODE |
| LOW | tests/ci/models/test_azure_responses_api.py | 262 | except Exception as e: | CODE |
| LOW | tests/ci/browser/test_true_cross_origin_click.py | 133 | except Exception as e: | STRING |
| LOW | tests/ci/browser/test_cdp_headers.py | 74 | except Exception: | CODE |
| LOW | tests/ci/browser/test_cdp_headers.py | 120 | except Exception: | CODE |
| LOW | tests/ci/browser/test_cdp_headers.py | 164 | except Exception: | CODE |
| LOW | tests/ci/browser/test_cross_origin_click.py | 135 | except Exception as e: | STRING |
| LOW | tests/ci/infrastructure/test_registry_validation.py | 485 | except Exception as e: | CODE |
| LOW | tests/ci/infrastructure/test_registry_validation.py | 497 | except Exception as e: | CODE |
| LOW | tests/ci/infrastructure/test_registry_validation.py | 509 | except Exception as e: | CODE |
| LOW | tests/ci/infrastructure/test_registry_validation.py | 546 | except Exception as e: | CODE |
| LOW | tests/ci/infrastructure/test_filesystem.py | 210 | except Exception: | CODE |
| LOW | tests/ci/infrastructure/test_filesystem.py | 221 | except Exception: | CODE |
| LOW⚡ | …astructure/test_registry_action_parameter_injection.py | 250 | except Exception as e: | CODE |
| LOW | tests/scripts/test_frame_hierarchy.py | 54 | except Exception: | CODE |
| LOW | tests/scripts/test_frame_hierarchy.py | 123 | except Exception as e: | CODE |
| LOW | tests/scripts/test_frame_hierarchy.py | 139 | except Exception: | CODE |
| LOW | tests/scripts/test_frame_hierarchy.py | 216 | except Exception as e: | CODE |
| LOW | tests/scripts/test_frame_hierarchy.py | 229 | except Exception: | CODE |
| LOW | examples/ui/gradio_demo.py | 77 | except Exception as e: | CODE |
| MEDIUM | examples/features/add_image_context.py | 103 | print(f'Error loading sample images: {e}') | CODE |
| LOW⚡ | examples/custom-functions/action_filters.py | 70 | except Exception: | CODE |
| LOW | examples/custom-functions/cua.py | 52 | except Exception as e: | CODE |
| LOW | examples/custom-functions/cua.py | 174 | except Exception as e: | CODE |
| MEDIUM | examples/custom-functions/cua.py | 175 | print(f'Error handling action {action}: {e}') | CODE |
| LOW | examples/custom-functions/cua.py | 272 | except Exception as e: | STRING |
| LOW | examples/custom-functions/cua.py | 313 | except Exception as e: | STRING |
| LOW | examples/custom-functions/file_upload.py | 63 | except Exception as e: | CODE |
| LOW | examples/custom-functions/parallel_agents.py | 118 | except Exception as e: | STRING |
| MEDIUM | examples/custom-functions/parallel_agents.py | 119 | print(f'Error creating subtasks: {e}') | STRING |
| LOW | examples/custom-functions/parallel_agents.py | 186 | except Exception as e: | CODE |
| LOW⚡ | examples/custom-functions/parallel_agents.py | 205 | except Exception as e: | CODE |
| LOW⚡ | examples/custom-functions/parallel_agents.py | 214 | except Exception as e: | CODE |
| LOW⚡ | examples/custom-functions/parallel_agents.py | 221 | except Exception as e: | CODE |
| LOW | examples/custom-functions/parallel_agents.py | 238 | except Exception: | CODE |
| LOW | examples/models/oci_models.py | 117 | except Exception as e: | CODE |
| LOW | examples/models/oci_models.py | 149 | except Exception as e: | CODE |
| LOW | examples/models/oci_models.py | 175 | except Exception as e: | CODE |
| LOW | examples/models/oci_models.py | 202 | except Exception as e: | CODE |
| LOW | examples/models/oci_models.py | 241 | except Exception as e: | CODE |
| LOW | examples/models/aws.py | 91 | except Exception as e: | CODE |
| LOW | examples/models/langchain/chat.py | 178 | except Exception as e: | CODE |
| LOW | examples/models/langchain/chat.py | 190 | except Exception as e: | CODE |
| LOW | examples/integrations/gmail_2fa_integration.py | 77 | except Exception as e: | CODE |
| LOW | examples/integrations/gmail_2fa_integration.py | 151 | except Exception as e: | CODE |
| LOW | examples/integrations/gmail_2fa_integration.py | 174 | except Exception as e: | CODE |
| LOW⚡ | examples/integrations/gmail_2fa_integration.py | 264 | except Exception as e: | CODE |
| LOW | examples/integrations/discord/discord_api.py | 74 | except Exception as e: | CODE |
| MEDIUM | examples/integrations/discord/discord_api.py | 75 | print(f'Error during bot startup: {e}') | CODE |
| LOW⚡ | examples/integrations/discord/discord_api.py | 89 | except Exception as e: | CODE |
| MEDIUM⚡ | examples/integrations/discord/discord_api.py | 90 | print(f'Error sending start message: {e}') | CODE |
| LOW⚡ | examples/integrations/discord/discord_api.py | 95 | except Exception as e: | CODE |
| LOW⚡ | examples/integrations/discord/discord_api.py | 102 | except Exception as e: | CODE |
| 571 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/ci/test_beta_agent.py | 1072 | 'arguments': {'cmd': 'sleep 60 && echo done', 'yield_time_ms': 250}, | CODE |
| HIGH | tests/scripts/debug_iframe_scrolling.py | 36 | "evaluation_previous_goal": null, | STRING |
| HIGH⚡ | browser_use/tools/service.py | 233 | while ((match = re.exec(fullText)) !== null) { | CODE |
| HIGH⚡ | browser_use/tools/service.py | 242 | if (no.offset <= match.index && no.offset + no.length > match.index) { | CODE |
| HIGH⚡ | browser_use/tools/service.py | 247 | matches.push({ | CODE |
| HIGH | browser_use/tools/service.py | 214 | if (text && text.trim()) { | CODE |
| HIGH | browser_use/tools/service.py | 215 | nodeOffsets.push({offset: fullText.length, length: text.length, node: node}); | CODE |
| HIGH | browser_use/tools/service.py | 263 | while (current && current !== document.body && current !== document) { | CODE |
| HIGH | browser_use/tools/service.py | 267 | else if (current.className && typeof current.className === 'string') { | CODE |
| HIGH | browser_use/tools/service.py | 296 | if (ATTRIBUTES && ATTRIBUTES.length > 0) { | CODE |
| HIGH | browser_use/tools/service.py | 307 | if (val !== null) { | CODE |
| HIGH | browser_use/tools/service.py | 313 | results.push(item); | CODE |
| HIGH | browser_use/tools/service.py | 947 | params={'expression': 'window.scrollY || window.pageYOffset || 0'}, session_id=cdp_session.session_id | CODE |
| HIGH | browser_use/tools/extraction/schema_utils.py | 121 | # so absent fields serialize as null, not an out-of-set value. | COMMENT |
| HIGH | browser_use/mcp/server.py | 945 | f'(function(){{ const el = document.querySelector({json.dumps(selector)}); return el ? el.outerHTML : null; }})()' | CODE |
| HIGH⚡ | browser_use/browser/profile.py | 1123 | if (checkInitialized && initialized) { | CODE |
| HIGH | browser_use/browser/profile.py | 1135 | const result = await chrome.storage.local.get({{ settings: null }}); | CODE |
| HIGH | browser_use/browser/profile.py | 1146 | if (checkInitialized && initialized) {{ | CODE |
| HIGH | browser_use/browser/session.py | 2899 | const scrollX = window.pageXOffset || document.documentElement.scrollLeft || 0; | CODE |
| HIGH | browser_use/browser/session.py | 2900 | const scrollY = window.pageYOffset || document.documentElement.scrollTop || 0; | CODE |
| HIGH | browser_use/browser/session.py | 3021 | const scrollX = window.pageXOffset || document.documentElement.scrollLeft || 0; | CODE |
| HIGH | browser_use/browser/session.py | 3022 | const scrollY = window.pageYOffset || document.documentElement.scrollTop || 0; | CODE |
| HIGH⚡ | browser_use/browser/demo_mode.py | 53 | panel: null, | CODE |
| HIGH⚡ | browser_use/browser/demo_mode.py | 54 | list: null, | CODE |
| HIGH⚡ | browser_use/browser/demo_mode.py | 57 | toggleButton: null, | CODE |
| HIGH | browser_use/browser/demo_mode.py | 93 | const host = document.body || document.documentElement; | CODE |
| HIGH | browser_use/browser/demo_mode.py | 102 | if (document.body && node.parentNode !== document.body) { | CODE |
| HIGH | browser_use/browser/demo_mode.py | 577 | return saved ? Number(saved) : null; | CODE |
| HIGH | browser_use/browser/demo_mode.py | 579 | return null; | CODE |
| HIGH⚡ | browser_use/browser/demo_mode.py | 630 | if (!detail) return null; | CODE |
| HIGH⚡ | browser_use/browser/demo_mode.py | 638 | if (!entry.metadata || typeof entry.metadata !== 'object') { | CODE |
| HIGH⚡ | browser_use/browser/demo_mode.py | 642 | entry.timestamp = entry.timestamp || new Date().toISOString(); | CODE |
| HIGH⚡ | browser_use/browser/demo_mode.py | 649 | state.messages.push(entry); | CODE |
| HIGH | browser_use/browser/demo_mode.py | 717 | if (id && expanded.has(id)) { | CODE |
| HIGH | browser_use/browser/demo_mode.py | 760 | frame = requestAnimationFrame(() => fn.apply(null, args)); | CODE |
| HIGH | browser_use/browser/watchdogs/aboutblank_watchdog.py | 203 | const imgWidth = img.offsetWidth || 300; | CODE |
| HIGH | browser_use/browser/watchdogs/aboutblank_watchdog.py | 204 | const imgHeight = img.offsetHeight || 300; | CODE |
| HIGH | browser_use/browser/watchdogs/storage_state_watchdog.py | 283 | f' if (window.location && window.location.origin !== {json.dumps(origin_value)}) return;\n' | CODE |
| HIGH | browser_use/browser/watchdogs/storage_state_watchdog.py | 299 | f' if (window.location && window.location.origin !== {json.dumps(origin_value)}) return;\n' | CODE |
| HIGH | browser_use/browser/watchdogs/dom_watchdog.py | 172 | if (isImageUrl && loadingDuration > 3000) continue; | CODE |
| HIGH | browser_use/browser/watchdogs/dom_watchdog.py | 174 | pending.push({ | CODE |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 635 | if (assocLabel && (assocLabel === atPoint || assocLabel.contains(atPoint))) { | CODE |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 641 | if (!isClickable && target.tagName === 'INPUT') { | CODE |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 643 | for (let i = 0; i < 3 && ancestor; i++) { | CODE |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 653 | if (!isClickable && target.tagName === 'LABEL') { | CODE |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 654 | if (target.htmlFor && atPoint.tagName === 'INPUT' && atPoint.id === target.htmlFor) { | CODE |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 658 | if (!isClickable && atPoint.tagName === 'INPUT' && target.contains(atPoint)) { | CODE |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 1379 | } else if (this.value !== undefined) { | CODE |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2020 | if (this.value !== undefined) { | CODE |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2026 | if (desc && desc.set) { | CODE |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2122 | if (element._reactInternalFiber || element._reactInternalInstance || element.__reactInternalInstance) { | CODE |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2141 | if (element.__vue__ || element._vnode || element.__vueParentComponent) { | CODE |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2254 | const doc = this.contentDocument || this.contentWindow.document; | CODE |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2256 | const scrollElement = doc.documentElement || doc.body; | CODE |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2271 | return {{success: false, error: e.toString()}}; | CODE |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2753 | null, | CODE |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 2919 | return null; | STRING |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 2924 | if (currentDepth >= maxDepth) return null; | STRING |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 3449 | })).filter(opt => opt.text || opt.value); | STRING |
| HIGH⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 3458 | return null; // Not a dropdown element | STRING |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/ci/test_markdown_chunking.py | 8 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_markdown_chunking.py | 10 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_markdown_chunking.py | 260 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_markdown_chunking.py | 262 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_markdown_chunking.py | 293 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_markdown_chunking.py | 295 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 88 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 90 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 134 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 136 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 152 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 154 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 172 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 174 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 189 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 191 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 205 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 207 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 223 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 225 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 255 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 257 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 266 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 268 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 282 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 284 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 297 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 299 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 316 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 318 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 332 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 334 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 348 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 350 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 364 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 366 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 380 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_agent_planning.py | 382 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_agent_planning.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_agent_planning.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_structured_extraction.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_structured_extraction.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_structured_extraction.py | 283 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_structured_extraction.py | 285 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_structured_extraction.py | 311 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_structured_extraction.py | 313 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_structured_extraction.py | 483 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_structured_extraction.py | 485 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_action_blank_page.py | 19 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_action_blank_page.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_action_blank_page.py | 87 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/ci/test_action_blank_page.py | 89 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_action_blank_page.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/ci/test_action_blank_page.py | 113 | # --------------------------------------------------------------------------- | COMMENT |
| 49 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/ci/conftest.py | 47 | # Create a temporary directory for test config (but not for extensions) | COMMENT |
| MEDIUM | tests/ci/test_variable_substitution.py | 149 | # Create a more complex action with nested structure | COMMENT |
| MEDIUM | tests/ci/test_ax_name_matching.py | 39 | # Create a mock LLM for summary | COMMENT |
| MEDIUM | tests/ci/test_ax_name_matching.py | 61 | # Create an element with DIFFERENT hash/xpath but SAME ax_name as the real element | COMMENT |
| MEDIUM | tests/ci/test_file_system_docx.py | 49 | # Create an external DOCX file | COMMENT |
| MEDIUM | tests/ci/test_file_system_docx.py | 111 | # Create a corrupted DOCX file | COMMENT |
| MEDIUM⚡ | tests/ci/test_markdown_extractor.py | 62 | # Create a JSON blob > 100 chars | COMMENT |
| MEDIUM | tests/ci/test_file_system_images.py | 27 | # Create an external image file | COMMENT |
| MEDIUM | tests/ci/test_file_system_images.py | 51 | # Create an external image file | COMMENT |
| MEDIUM | tests/ci/test_file_system_images.py | 110 | # Create a large image (2000x2000) | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 177 | # Create a mock LLM for summary | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 209 | # Create a step that originally had an error (using navigate action which doesn't require element matching) | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 259 | # Create a mock LLM for summary (will be reached after the step succeeds) | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 291 | # Create a step that originally had an error but uses navigate (which will work on rerun) | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 460 | # Create a mock LLM for summary that returns partial success | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 599 | # Create a mock LLM for summary | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 621 | # Create an interacted element that matches the button on the page | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 746 | # Create an interacted element | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 1075 | # Create a mock LLM for summary | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 1097 | # Create an element that matches the page | COMMENT |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 1201 | # Create an element that WON'T match (different identifiers) | COMMENT |
| MEDIUM⚡ | tests/ci/test_fallback_llm.py | 359 | # Create a failing primary and succeeding fallback | COMMENT |
| MEDIUM | tests/ci/test_tools.py | 115 | # Define a custom action | COMMENT |
| MEDIUM | tests/ci/test_tools.py | 274 | # Create a temporary directory for the file system | COMMENT |
| MEDIUM | tests/ci/security/test_upload_file_containment.py | 158 | # Create a local managed file with a basename that collides with the | COMMENT |
| MEDIUM | tests/ci/security/test_domain_filtering.py | 13 | # Create a context config with a sample allowed domain | COMMENT |
| MEDIUM | tests/ci/security/test_domain_filtering.py | 475 | # Create a list of 100 domains | COMMENT |
| MEDIUM | tests/ci/security/test_domain_filtering.py | 502 | # Create a list with 100 domains (some with www, some without) | COMMENT |
| MEDIUM | tests/ci/security/test_domain_filtering.py | 531 | # Create a large allowlist | COMMENT |
| MEDIUM | tests/ci/security/test_sensitive_data.py | 44 | # Create a simple Pydantic model with sensitive data placeholders | COMMENT |
| MEDIUM | tests/ci/security/test_sensitive_data.py | 77 | # Create a simple Pydantic model with sensitive data placeholders | COMMENT |
| MEDIUM | tests/ci/browser/test_true_cross_origin_click.py | 39 | # Create main page with TRUE cross-origin iframe pointing to example.com | COMMENT |
| MEDIUM | tests/ci/browser/test_session_start.py | 89 | # # Create a new tab explicitly | COMMENT |
| MEDIUM | tests/ci/browser/test_session_start.py | 152 | # Create a reusable profile | COMMENT |
| MEDIUM | tests/ci/browser/test_session_start.py | 188 | # Create a reusable session with keep_alive | COMMENT |
| MEDIUM | tests/ci/browser/test_cross_origin_click.py | 48 | # Create main page with iframe pointing to our test server | STRING |
| MEDIUM | tests/ci/infrastructure/test_registry_validation.py | 416 | # Create a custom param model for select_cell_or_range | COMMENT |
| MEDIUM | tests/ci/infrastructure/test_registry_validation.py | 425 | # Define the function without using our registry - this will be a helper function | COMMENT |
| MEDIUM | tests/ci/infrastructure/test_registry_validation.py | 515 | # Create the model instance | COMMENT |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 611 | # Create a large file | COMMENT |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 711 | # Create a products CSV file | COMMENT |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 845 | # Create a file to ensure directory has content | COMMENT |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 923 | # Create a state with unknown file type | COMMENT |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 1220 | # Create a notes file | COMMENT |
| MEDIUM⚡ | …astructure/test_registry_action_parameter_injection.py | 263 | # Create a new tab | COMMENT |
| MEDIUM | …astructure/test_registry_action_parameter_injection.py | 343 | # Create a registry | COMMENT |
| MEDIUM | …astructure/test_registry_action_parameter_injection.py | 370 | # Create an instance with the simple_action | COMMENT |
| MEDIUM | tests/scripts/debug_iframe_scrolling.py | 29 | # Create the sequence of actions for the mock LLM | COMMENT |
| MEDIUM | tests/scripts/debug_iframe_scrolling.py | 122 | # Create an agent with the mock LLM | COMMENT |
| MEDIUM | tests/scripts/debug_iframe_scrolling.py | 178 | # Create the action model for navigation | COMMENT |
| MEDIUM⚡ | examples/features/sensitive_data.py | 22 | # Define a single credential set that can be reused | COMMENT |
| MEDIUM | examples/custom-functions/action_filters.py | 100 | # Create the agent | COMMENT |
| MEDIUM | examples/custom-functions/file_upload.py | 88 | # Create the agent with file upload capability | COMMENT |
| MEDIUM | examples/custom-functions/parallel_agents.py | 156 | # Create a unique temp directory for this agent's browser data | COMMENT |
| MEDIUM | examples/custom-functions/parallel_agents.py | 178 | # Create a new browser session for each agent with the custom profile | COMMENT |
| MEDIUM | examples/models/oci_models.py | 192 | # Create a simple agent to test the model | COMMENT |
| MEDIUM | examples/models/langchain/example.py | 23 | # Create a LangChain model (OpenAI) | COMMENT |
| MEDIUM | examples/models/langchain/example.py | 32 | # Create a simple task | COMMENT |
| MEDIUM⚡ | examples/cloud/01_basic_task.py | 147 | # Define a simple search task (using DuckDuckGo to avoid captchas) | COMMENT |
| MEDIUM | examples/getting_started/04_multi_step_task.py | 35 | # Define a multi-step task | COMMENT |
| 42 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/ci/test_ai_step.py | 57 | # Check if any message has image content | COMMENT |
| LOW | tests/ci/conftest.py | 131 | # Check if output_format is provided (2nd argument or in kwargs) | STRING |
| LOW | tests/ci/evaluate_tasks.py | 72 | # Check if Google API key is available for judge LLM | COMMENT |
| LOW | tests/ci/evaluate_tasks.py | 205 | # Set environment to reduce noise in subprocess | COMMENT |
| LOW | tests/ci/evaluate_tasks.py | 325 | # Output results for GitHub Actions | COMMENT |
| LOW | tests/ci/models/model_test_helper.py | 104 | # Check if SUCCESS appears in any step (indicating button was clicked) | STRING |
| LOW | tests/ci/browser/test_true_cross_origin_click.py | 81 | # Check if element is from cross-origin iframe (example.com) | STRING |
| LOW | tests/ci/browser/test_true_cross_origin_click.py | 97 | # Check if cross-origin iframe loaded | STRING |
| LOW | tests/ci/browser/test_screenshot.py | 146 | # Check if browser state has screenshot path | STRING |
| LOW | tests/ci/browser/test_dom_serializer.py | 162 | # Check if this is an iframe tag (not content inside iframe) | STRING |
| LOW | tests/ci/browser/test_dom_serializer.py | 165 | # Check if element has an ID attribute | STRING |
| LOW | tests/ci/browser/test_session_start.py | 292 | # Check if BrowserConnectedEvent was dispatched | COMMENT |
| LOW | tests/ci/browser/test_cross_origin_click.py | 93 | # Check if element is from iframe (identified by id attributes we set) | STRING |
| LOW | tests/ci/browser/test_cross_origin_click.py | 106 | # Check if iframe elements were found | STRING |
| LOW | tests/ci/infrastructure/test_filesystem.py | 372 | # Read file with invalid name - gets auto-sanitized to invalidname.md, but file doesn't exist | COMMENT |
| LOW | tests/scripts/test_frame_hierarchy.py | 50 | # Check if target has active sessions using the public API | COMMENT |
| LOW | tests/scripts/test_frame_hierarchy.py | 177 | # Check if this should be the main frame | COMMENT |
| LOW | tests/scripts/debug_iframe_scrolling.py | 260 | # Check if lower form fields appear after scroll | COMMENT |
| LOW⚡ | examples/custom-functions/action_filters.py | 78 | # Check if it's a login page | COMMENT |
| LOW | examples/custom-functions/cua.py | 340 | # Check if OpenAI API key is available | STRING |
| LOW | examples/custom-functions/file_upload.py | 49 | # Check if it's a file input element | COMMENT |
| LOW | examples/custom-functions/parallel_agents.py | 271 | # Print results | COMMENT |
| LOW | examples/custom-functions/parallel_agents.py | 287 | # Check if Google API key is available | COMMENT |
| LOW | examples/custom-functions/parallel_agents.py | 295 | # Check if API key looks valid (Google API keys are typically 39 characters) | COMMENT |
| LOW | examples/sandbox/example.py | 49 | # Check if API keys are set | COMMENT |
| LOW | examples/cloud/01_basic_task.py | 131 | # Check if finished | COMMENT |
| LOW | .github/workflows/eval-on-pr.yml | 48 | # Check if trigger was was successful | COMMENT |
| LOW | browser_use/config.py | 328 | # Check if it's already in DB-style format | COMMENT |
| LOW | browser_use/config.py | 332 | # Check if the values are DB-style entries (have UUIDs as keys) | COMMENT |
| LOW | browser_use/logging_config.py | 82 | # Check if handlers are already set up | COMMENT |
| LOW⚡ | browser_use/init_cmd.py | 172 | # Check if file already exists | COMMENT |
| LOW⚡ | browser_use/init_cmd.py | 182 | # Write file | COMMENT |
| LOW | browser_use/init_cmd.py | 354 | # Write file | COMMENT |
| LOW | browser_use/__init__.py | 30 | # Check if the event loop is closed before calling the original | COMMENT |
| LOW | browser_use/observability.py | 30 | # Check if we're in debug mode | COMMENT |
| LOW | browser_use/utils.py | 366 | # Set flag to indicate we're waiting for input | COMMENT |
| LOW | browser_use/tools/service.py | 560 | # Check if it's specifically a RuntimeError about CDP client | COMMENT |
| LOW | browser_use/tools/service.py | 732 | # Check if result contains validation error (e.g., trying to click <select> or file input) | COMMENT |
| LOW | browser_use/tools/service.py | 863 | # Check if file is in available_file_paths (user-provided or downloaded files) | COMMENT |
| LOW | browser_use/tools/service.py | 876 | # Check if the file is actually managed by the FileSystem service | COMMENT |
| LOW | browser_use/tools/service.py | 1717 | # Check if the selection was successful | COMMENT |
| LOW | browser_use/tools/service.py | 2259 | # Check if this is a registered action | COMMENT |
| LOW | browser_use/tools/utils.py | 52 | # Check if hidden | COMMENT |
| LOW⚡ | browser_use/tools/registry/service.py | 108 | # Check if this is a Type 1 pattern (first param is BaseModel) | COMMENT |
| LOW | browser_use/tools/registry/service.py | 125 | # Check if types are compatible (exact match, subclass, or generic list) | COMMENT |
| LOW | browser_use/tools/registry/service.py | 210 | # Check if required special param is None | COMMENT |
| LOW | browser_use/llm/browser_use/chat.py | 179 | # Check if this is a retryable error | COMMENT |
| LOW | browser_use/llm/anthropic/serializer.py | 288 | # Set cache to False for all messages except the last cached one | COMMENT |
| LOW⚡ | browser_use/agent/service.py | 699 | # Check if we should restore from existing state first | COMMENT |
| LOW⚡ | browser_use/agent/service.py | 3219 | # Check if this is a "Could not find matching element" error for a menu item | COMMENT |
| LOW⚡ | browser_use/agent/service.py | 3227 | # Check if current step targets a menu item element | COMMENT |
| LOW | browser_use/agent/service.py | 493 | # Check if LLM is ChatAnthropic instance | COMMENT |
| LOW | browser_use/agent/service.py | 498 | # Check if model is a browser-use fine-tuned model (uses simplified prompts) | COMMENT |
| LOW | browser_use/agent/service.py | 531 | # Check if sensitive_data has domain-specific credentials | COMMENT |
| LOW | browser_use/agent/service.py | 561 | # Check if pattern is covered by an allowed domain | COMMENT |
| LOW | browser_use/agent/service.py | 880 | # Check if it's a MissingCookieException | COMMENT |
| LOW | browser_use/agent/service.py | 1273 | # Check if reconnection succeeded | COMMENT |
| LOW | browser_use/agent/service.py | 1968 | # Check if we can switch to a fallback LLM | COMMENT |
| LOW | browser_use/agent/service.py | 1989 | # Check if error is retryable (rate limit, auth errors, or server errors) | COMMENT |
| LOW | browser_use/agent/service.py | 2003 | # Check if we have a fallback LLM configured | COMMENT |
| 109 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/ci/test_ai_step.py | 46 | CODE | |
| LOW | tests/ci/test_ai_step.py | 50 | CODE | |
| LOW | tests/ci/test_beta_agent.py | 116 | CODE | |
| LOW | tests/ci/evaluate_tasks.py | 201 | CODE | |
| LOW | tests/ci/test_extract_images.py | 202 | CODE | |
| LOW | tests/ci/test_extract_images.py | 250 | CODE | |
| LOW | tests/ci/test_extract_images.py | 222 | CODE | |
| LOW | tests/ci/test_extract_images.py | 270 | CODE | |
| LOW | tests/ci/security/test_sensitive_data.py | 276 | CODE | |
| LOW | tests/ci/security/test_sensitive_data.py | 368 | CODE | |
| LOW | tests/ci/browser/test_true_cross_origin_click.py | 32 | CODE | |
| LOW | tests/ci/browser/test_dom_serializer.py | 76 | CODE | |
| LOW | tests/ci/browser/test_dom_serializer.py | 267 | CODE | |
| LOW | tests/ci/browser/test_dom_serializer.py | 347 | CODE | |
| LOW | tests/ci/browser/test_cdp_headers.py | 131 | CODE | |
| LOW | tests/ci/browser/test_cross_origin_click.py | 32 | CODE | |
| LOW | tests/scripts/test_frame_hierarchy.py | 12 | CODE | |
| LOW | tests/scripts/debug_iframe_scrolling.py | 24 | CODE | |
| LOW | tests/scripts/debug_iframe_scrolling.py | 130 | CODE | |
| LOW | examples/features/rerun_history.py | 58 | CODE | |
| LOW | examples/custom-functions/cua.py | 38 | CODE | |
| LOW | examples/custom-functions/parallel_agents.py | 35 | CODE | |
| LOW | examples/models/langchain/chat.py | 35 | CODE | |
| LOW | examples/models/langchain/chat.py | 100 | CODE | |
| LOW | examples/integrations/gmail_2fa_integration.py | 80 | CODE | |
| LOW | examples/integrations/discord/discord_api.py | 77 | CODE | |
| LOW | examples/integrations/slack/slack_api.py | 48 | CODE | |
| LOW | examples/cloud/03_structured_output.py | 175 | CODE | |
| LOW | examples/cloud/03_structured_output.py | 325 | CODE | |
| LOW | examples/cloud/04_proxy_usage.py | 284 | CODE | |
| LOW | examples/cloud/05_search_api.py | 296 | CODE | |
| LOW | examples/apps/ad-use/ad_generator.py | 184 | CODE | |
| LOW | examples/apps/news-use/news_monitor.py | 66 | CODE | |
| LOW | examples/apps/news-use/news_monitor.py | 251 | CODE | |
| LOW | examples/apps/news-use/news_monitor.py | 118 | CODE | |
| LOW | examples/apps/msg-use/scheduler.py | 44 | CODE | |
| LOW | examples/apps/msg-use/scheduler.py | 175 | CODE | |
| LOW | browser_use/config.py | 370 | CODE | |
| LOW | browser_use/logging_config.py | 64 | CODE | |
| LOW | browser_use/logging_config.py | 95 | CODE | |
| LOW | browser_use/init_cmd.py | 217 | CODE | |
| LOW | browser_use/utils.py | 59 | CODE | |
| LOW | browser_use/utils.py | 417 | CODE | |
| LOW | browser_use/utils.py | 443 | CODE | |
| LOW | browser_use/utils.py | 522 | CODE | |
| LOW | browser_use/utils.py | 624 | CODE | |
| LOW | browser_use/utils.py | 639 | CODE | |
| LOW | browser_use/utils.py | 418 | CODE | |
| LOW | browser_use/utils.py | 446 | CODE | |
| LOW | browser_use/utils.py | 420 | CODE | |
| LOW | browser_use/utils.py | 448 | CODE | |
| LOW | browser_use/beta/service.py | 915 | CODE | |
| LOW | browser_use/beta/service.py | 1218 | CODE | |
| LOW | browser_use/beta/service.py | 1581 | CODE | |
| LOW | browser_use/beta/service.py | 1629 | CODE | |
| LOW | browser_use/beta/service.py | 1693 | CODE | |
| LOW | browser_use/beta/service.py | 2078 | CODE | |
| LOW | browser_use/beta/service.py | 2161 | CODE | |
| LOW | browser_use/beta/service.py | 2346 | CODE | |
| LOW | browser_use/beta/service.py | 2450 | CODE | |
| 223 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | browser_use/agent/service.py | 2805 | registered_action = self.tools.registry.registry.actions.get(action_name) | CODE |
| CRITICAL⚡ | browser_use/browser/session_manager.py | 506 | await self.browser_session._cdp_client_root.send.Runtime.runIfWaitingForDebugger(session_id=session_id) | CODE |
| CRITICAL | browser_use/browser/session_manager.py | 428 | await self.browser_session._cdp_client_root.send.Target.setAutoAttach( | CODE |
| CRITICAL | browser_use/browser/session_manager.py | 728 | await self.browser_session._cdp_client_root.send.Target.activateTarget(params={'targetId': new_target_id}) | CODE |
| CRITICAL | browser_use/browser/watchdogs/permissions_watchdog.py | 37 | await self.browser_session.cdp_client.send.Browser.grantPermissions( | CODE |
| CRITICAL⚡ | browser_use/browser/watchdogs/popups_watchdog.py | 56 | await self.browser_session._cdp_client_root.send.Page.enable() | CODE |
| CRITICAL | browser_use/browser/watchdogs/popups_watchdog.py | 91 | self.browser_session._cdp_client_root.send.Page.handleJavaScriptDialog( | CODE |
| CRITICAL | browser_use/browser/watchdogs/popups_watchdog.py | 111 | self.browser_session._cdp_client_root.send.Page.handleJavaScriptDialog( | CODE |
| CRITICAL⚡ | browser_use/browser/watchdogs/popups_watchdog.py | 134 | self.browser_session._cdp_client_root.register.Page.javascriptDialogOpening(handle_dialog) # type: ignore[arg-type | CODE |
| CRITICAL | browser_use/browser/watchdogs/recording_watchdog.py | 83 | self.browser_session.cdp_client.register.Page.screencastFrame(self.on_screencastFrame) | CODE |
| CRITICAL | browser_use/browser/watchdogs/recording_watchdog.py | 111 | await self.browser_session.cdp_client.send.Page.stopScreencast(session_id=session_id) | CODE |
| CRITICAL | browser_use/browser/watchdogs/recording_watchdog.py | 150 | await self.browser_session.cdp_client.send.Page.stopScreencast(session_id=self._current_session_id) | CODE |
| CRITICAL | browser_use/browser/watchdogs/recording_watchdog.py | 211 | await self.browser_session.cdp_client.send.Page.screencastFrameAck( | CODE |
| CRITICAL | browser_use/browser/watchdogs/har_recording_watchdog.py | 178 | version_info = await self.browser_session.cdp_client.send.Browser.getVersion() | CODE |
| CRITICAL | browser_use/browser/watchdogs/har_recording_watchdog.py | 393 | resp = await self_ref.browser_session.cdp_client.send.Network.getResponseBody( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/ci/test_action_record.py | 8 | CODE | |
| LOW | tests/ci/test_cdp_timeout.py | 10 | CODE | |
| LOW | tests/ci/test_beta_agent.py | 1 | CODE | |
| LOW | …sts/ci/security/test_download_filename_sanitization.py | 21 | CODE | |
| LOW | tests/ci/security/test_upload_file_containment.py | 18 | CODE | |
| LOW | examples/models/langchain/chat.py | 13 | CODE | |
| LOW | scripts/sync_browser_harness_skill.py | 1 | CODE | |
| LOW | browser_use/__init__.py | 48 | CODE | |
| LOW | browser_use/__init__.py | 49 | CODE | |
| LOW | browser_use/__init__.py | 50 | CODE | |
| LOW | browser_use/__init__.py | 50 | CODE | |
| LOW | browser_use/__init__.py | 50 | CODE | |
| LOW | browser_use/__init__.py | 51 | CODE | |
| LOW | browser_use/__init__.py | 51 | CODE | |
| LOW | browser_use/__init__.py | 52 | CODE | |
| LOW | browser_use/__init__.py | 53 | CODE | |
| LOW | browser_use/__init__.py | 54 | CODE | |
| LOW | browser_use/__init__.py | 55 | CODE | |
| LOW | browser_use/__init__.py | 56 | CODE | |
| LOW | browser_use/__init__.py | 57 | CODE | |
| LOW | browser_use/__init__.py | 58 | CODE | |
| LOW | browser_use/__init__.py | 59 | CODE | |
| LOW | browser_use/__init__.py | 60 | CODE | |
| LOW | browser_use/__init__.py | 61 | CODE | |
| LOW | browser_use/__init__.py | 62 | CODE | |
| LOW | browser_use/__init__.py | 63 | CODE | |
| LOW | browser_use/__init__.py | 64 | CODE | |
| LOW | browser_use/__init__.py | 65 | CODE | |
| LOW | browser_use/__init__.py | 66 | CODE | |
| LOW | browser_use/__init__.py | 67 | CODE | |
| LOW | browser_use/__init__.py | 67 | CODE | |
| LOW | browser_use/cli.py | 3 | CODE | |
| LOW | browser_use/beta/service.py | 1 | CODE | |
| LOW | browser_use/beta/__init__.py | 3 | CODE | |
| LOW | browser_use/beta/__init__.py | 7 | CODE | |
| LOW | browser_use/beta/__init__.py | 7 | CODE | |
| LOW | browser_use/beta/__init__.py | 7 | CODE | |
| LOW | browser_use/beta/__init__.py | 10 | CODE | |
| LOW | browser_use/beta/__init__.py | 10 | CODE | |
| LOW | browser_use/beta/__init__.py | 11 | CODE | |
| LOW | browser_use/beta/__init__.py | 12 | CODE | |
| LOW | browser_use/beta/__init__.py | 13 | CODE | |
| LOW | browser_use/beta/__init__.py | 14 | CODE | |
| LOW | browser_use/beta/__init__.py | 15 | CODE | |
| LOW | browser_use/beta/__init__.py | 16 | CODE | |
| LOW | browser_use/beta/__init__.py | 17 | CODE | |
| LOW | browser_use/beta/__init__.py | 18 | CODE | |
| LOW | browser_use/beta/__init__.py | 19 | CODE | |
| LOW | browser_use/beta/__init__.py | 20 | CODE | |
| LOW | browser_use/beta/__init__.py | 21 | CODE | |
| LOW | browser_use/beta/__init__.py | 22 | CODE | |
| LOW | browser_use/tools/extraction/__init__.py | 1 | CODE | |
| LOW | browser_use/tools/extraction/__init__.py | 2 | CODE | |
| LOW | browser_use/llm/models.py | 34 | CODE | |
| LOW | browser_use/llm/__init__.py | 10 | CODE | |
| LOW | browser_use/llm/__init__.py | 11 | CODE | |
| LOW | browser_use/llm/__init__.py | 11 | CODE | |
| LOW | browser_use/llm/__init__.py | 11 | CODE | |
| LOW | browser_use/llm/__init__.py | 11 | CODE | |
| LOW | browser_use/llm/__init__.py | 17 | CODE | |
| 119 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/ci/test_tools.py | 0 | create and provide a test http server that serves static content. | STRING |
| HIGH | tests/ci/interactions/test_dropdown_native.py | 0 | create and provide a test http server that serves static content. | STRING |
| HIGH | tests/ci/interactions/test_dropdown_aria_menus.py | 0 | create and provide a test http server that serves static content. | STRING |
| HIGH | tests/ci/infrastructure/test_registry_core.py | 0 | create and provide a test http server that serves static content. | STRING |
| HIGH | …astructure/test_registry_action_parameter_injection.py | 0 | create and provide a test http server that serves static content. | STRING |
| HIGH | tests/ci/test_tools.py | 0 | create and provide a browser instance with security disabled. | STRING |
| HIGH | tests/ci/interactions/test_dropdown_native.py | 0 | create and provide a browser instance with security disabled. | STRING |
| HIGH | tests/ci/interactions/test_dropdown_aria_menus.py | 0 | create and provide a browser instance with security disabled. | STRING |
| HIGH | examples/simple.py | 0 | setup: 1. get your api key from https://cloud.browser-use.com/new-api-key 2. set environment variable: export browser_us | STRING |
| HIGH | examples/features/judge_trace.py | 0 | setup: 1. get your api key from https://cloud.browser-use.com/new-api-key 2. set environment variable: export browser_us | STRING |
| HIGH | examples/models/bu_oss.py | 0 | setup: 1. get your api key from https://cloud.browser-use.com/new-api-key 2. set environment variable: export browser_us | STRING |
| HIGH | examples/getting_started/01_basic_search.py | 0 | setup: 1. get your api key from https://cloud.browser-use.com/new-api-key 2. set environment variable: export browser_us | STRING |
| HIGH | examples/features/multi_tab.py | 0 | simple try of the agent. @dev you need to add modelscope_api_key to your environment variables. | STRING |
| HIGH | examples/models/gpt-4.1.py | 0 | simple try of the agent. @dev you need to add modelscope_api_key to your environment variables. | STRING |
| HIGH | examples/models/gpt-5-mini.py | 0 | simple try of the agent. @dev you need to add modelscope_api_key to your environment variables. | STRING |
| HIGH | examples/models/openrouter.py | 0 | simple try of the agent. @dev you need to add modelscope_api_key to your environment variables. | STRING |
| HIGH | examples/models/novita.py | 0 | simple try of the agent. @dev you need to add modelscope_api_key to your environment variables. | STRING |
| HIGH | examples/models/modelscope_example.py | 0 | simple try of the agent. @dev you need to add modelscope_api_key to your environment variables. | STRING |
| HIGH | browser_use/llm/vercel/chat.py | 0 | invoke the aws bedrock model with the given messages. args: messages: list of chat messages output_format: optional pyda | STRING |
| HIGH | browser_use/llm/openrouter/chat.py | 0 | invoke the aws bedrock model with the given messages. args: messages: list of chat messages output_format: optional pyda | STRING |
| HIGH | browser_use/llm/google/chat.py | 0 | invoke the aws bedrock model with the given messages. args: messages: list of chat messages output_format: optional pyda | STRING |
| HIGH | browser_use/llm/openai/chat.py | 0 | invoke the aws bedrock model with the given messages. args: messages: list of chat messages output_format: optional pyda | STRING |
| HIGH | browser_use/llm/aws/chat_bedrock.py | 0 | invoke the aws bedrock model with the given messages. args: messages: list of chat messages output_format: optional pyda | STRING |
| HIGH | browser_use/llm/groq/serializer.py | 0 | serialize content for user messages (text and images allowed). | STRING |
| HIGH | browser_use/llm/openai/responses_serializer.py | 0 | serialize content for user messages (text and images allowed). | STRING |
| HIGH | browser_use/llm/openai/serializer.py | 0 | serialize content for user messages (text and images allowed). | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/ci/test_ax_name_matching.py | 81 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_ax_name_matching.py | 104 | # Step 2: Click on element that has different hash/xpath but same ax_name | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 357 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 380 | # Step 2: Click on element that won't be found (different identifiers) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 486 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 509 | # Step 2: Click on element that won't exist on current page (different hash/attributes) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 636 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 659 | # Step 2: Click login button (first click) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 682 | # Step 3: Click login button AGAIN (redundant retry - same element, same action) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 1112 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 1135 | # Step 2: Click button (needs element matching, should wait for elements) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 1216 | # Step 1: Navigate | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 1234 | # Step 2: Click non-matching element (will fail and retry) | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 299 | # Step 1: Create external image | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 304 | # Step 2: Read via FileSystem | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 310 | # Step 3: Create ActionResult (simulating tools/service.py) | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 318 | # Step 4: Process in MessageManager | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 328 | # Step 5: Create message with AgentMessagePrompt | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 357 | # Step 1: Create DOCX | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 364 | # Step 2: Read it | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 367 | # Step 3: Create ActionResult (simulating tools/service.py) | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 374 | # Step 4: Process in MessageManager | COMMENT |
| LOW⚡ | tests/ci/infrastructure/test_url_shortening.py | 121 | # Step 1: Input processing with URL shortening | COMMENT |
| LOW | tests/ci/infrastructure/test_url_shortening.py | 134 | # Step 2: Simulate agent output with shortened URL | COMMENT |
| LOW | tests/ci/infrastructure/test_url_shortening.py | 149 | # Step 3: Output processing with URL restoration (modifies agent_output in-place) | COMMENT |
| LOW⚡ | examples/features/rerun_history.py | 73 | # Step 1: Run the agent and save history | COMMENT |
| LOW⚡ | examples/features/rerun_history.py | 80 | # Step 2: Detect variables in the saved history | COMMENT |
| LOW | examples/features/rerun_history.py | 91 | # Step 3: Rerun the history with substituted values | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 208 | # Step 1: Check and validate credentials | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 228 | # Step 2: Initialize Gmail service and test authentication | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 242 | # Step 3: Initialize tools with authenticated service | COMMENT |
| LOW⚡ | examples/integrations/gmail_2fa_integration.py | 256 | # Step 4: Test Gmail functionality | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 278 | # Step 5: Demonstrate 2FA code finding | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 292 | # Step 6: Simulate complete login flow | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 314 | # Step 1: Start Chrome with CDP debugging | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 318 | # Step 2: Connect Playwright to the same Chrome instance | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 321 | # Step 3: Create Browser-Use session connected to same Chrome | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 324 | # Step 4: Create AI agent with our custom Playwright-powered tools | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 348 | # Step 5: Run the agent - it will use both Browser-Use actions and our custom Playwright actions | STRING |
| LOW⚡ | examples/use-cases/shopping.py | 25 | ### Step 1: Navigate to the Website | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 31 | ### Step 2: Add Items to the Basket | COMMENT |
| LOW | examples/use-cases/shopping.py | 66 | ### Step 3: Handling Unavailable Items | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 79 | ### Step 4: Adjusting for Minimum Order Requirement | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 87 | ### Step 5: Select Delivery Window | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 93 | ### Step 6: Checkout | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 102 | ### Step 7: Confirm Order & Output Summary | COMMENT |
| LOW⚡ | examples/cloud/01_basic_task.py | 153 | # Step 1: Create the task | COMMENT |
| LOW⚡ | examples/cloud/01_basic_task.py | 156 | # Step 2: Wait for completion | COMMENT |
| LOW⚡ | examples/cloud/01_basic_task.py | 159 | # Step 3: Display results | COMMENT |
| LOW⚡ | browser_use/tools/registry/service.py | 93 | # Step 1: Validate no **kwargs in original function signature | COMMENT |
| LOW⚡ | browser_use/tools/registry/service.py | 102 | # Step 2: Separate special and action parameters | COMMENT |
| LOW | browser_use/tools/registry/service.py | 149 | # Step 3: Create or validate param model | COMMENT |
| LOW | browser_use/tools/registry/service.py | 168 | # Step 4: Create normalized wrapper function | COMMENT |
| LOW⚡ | browser_use/agent/service.py | 1777 | # Step 1: Remove well-formed <think>...</think> | COMMENT |
| LOW⚡ | browser_use/agent/service.py | 1779 | # Step 2: If there's an unmatched closing tag </think>, | COMMENT |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1810 | # Step 1: Focus the element using simple strategy | STRING |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1815 | # Step 2: Check if this element requires direct value assignment (date/time inputs) | STRING |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1828 | # Step 3: Clear existing text if requested (only for regular inputs that support typing) | STRING |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1834 | # Step 4: Type the text character by character using proper human-like key events | STRING |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1913 | # Step 2: Send char event (WITH text parameter) - this is crucial for text input | STRING |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/ci/test_ax_name_matching.py | 81 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_ax_name_matching.py | 104 | # Step 2: Click on element that has different hash/xpath but same ax_name | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 357 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 380 | # Step 2: Click on element that won't be found (different identifiers) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 486 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 509 | # Step 2: Click on element that won't exist on current page (different hash/attributes) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 636 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 659 | # Step 2: Click login button (first click) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 682 | # Step 3: Click login button AGAIN (redundant retry - same element, same action) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 1112 | # Step 1: Navigate to test page | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 1135 | # Step 2: Click button (needs element matching, should wait for elements) | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 1216 | # Step 1: Navigate | COMMENT |
| LOW | tests/ci/test_rerun_ai_summary.py | 1234 | # Step 2: Click non-matching element (will fail and retry) | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 299 | # Step 1: Create external image | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 304 | # Step 2: Read via FileSystem | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 310 | # Step 3: Create ActionResult (simulating tools/service.py) | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 318 | # Step 4: Process in MessageManager | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 328 | # Step 5: Create message with AgentMessagePrompt | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 357 | # Step 1: Create DOCX | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 364 | # Step 2: Read it | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 367 | # Step 3: Create ActionResult (simulating tools/service.py) | COMMENT |
| LOW⚡ | tests/ci/test_file_system_llm_integration.py | 374 | # Step 4: Process in MessageManager | COMMENT |
| LOW⚡ | tests/ci/infrastructure/test_url_shortening.py | 121 | # Step 1: Input processing with URL shortening | COMMENT |
| LOW | tests/ci/infrastructure/test_url_shortening.py | 134 | # Step 2: Simulate agent output with shortened URL | COMMENT |
| LOW | tests/ci/infrastructure/test_url_shortening.py | 149 | # Step 3: Output processing with URL restoration (modifies agent_output in-place) | COMMENT |
| LOW⚡ | examples/features/rerun_history.py | 73 | # Step 1: Run the agent and save history | COMMENT |
| LOW⚡ | examples/features/rerun_history.py | 80 | # Step 2: Detect variables in the saved history | COMMENT |
| LOW | examples/features/rerun_history.py | 91 | # Step 3: Rerun the history with substituted values | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 208 | # Step 1: Check and validate credentials | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 228 | # Step 2: Initialize Gmail service and test authentication | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 242 | # Step 3: Initialize tools with authenticated service | COMMENT |
| LOW⚡ | examples/integrations/gmail_2fa_integration.py | 256 | # Step 4: Test Gmail functionality | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 278 | # Step 5: Demonstrate 2FA code finding | COMMENT |
| LOW | examples/integrations/gmail_2fa_integration.py | 292 | # Step 6: Simulate complete login flow | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 314 | # Step 1: Start Chrome with CDP debugging | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 318 | # Step 2: Connect Playwright to the same Chrome instance | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 321 | # Step 3: Create Browser-Use session connected to same Chrome | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 324 | # Step 4: Create AI agent with our custom Playwright-powered tools | COMMENT |
| LOW⚡ | examples/browser/playwright_integration.py | 348 | # Step 5: Run the agent - it will use both Browser-Use actions and our custom Playwright actions | STRING |
| LOW⚡ | examples/use-cases/shopping.py | 25 | ### Step 1: Navigate to the Website | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 31 | ### Step 2: Add Items to the Basket | COMMENT |
| LOW | examples/use-cases/shopping.py | 66 | ### Step 3: Handling Unavailable Items | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 79 | ### Step 4: Adjusting for Minimum Order Requirement | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 87 | ### Step 5: Select Delivery Window | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 93 | ### Step 6: Checkout | COMMENT |
| LOW⚡ | examples/use-cases/shopping.py | 102 | ### Step 7: Confirm Order & Output Summary | COMMENT |
| LOW⚡ | examples/cloud/01_basic_task.py | 153 | # Step 1: Create the task | COMMENT |
| LOW⚡ | examples/cloud/01_basic_task.py | 156 | # Step 2: Wait for completion | COMMENT |
| LOW⚡ | examples/cloud/01_basic_task.py | 159 | # Step 3: Display results | COMMENT |
| LOW⚡ | browser_use/tools/registry/service.py | 93 | # Step 1: Validate no **kwargs in original function signature | COMMENT |
| LOW⚡ | browser_use/tools/registry/service.py | 102 | # Step 2: Separate special and action parameters | COMMENT |
| LOW | browser_use/tools/registry/service.py | 149 | # Step 3: Create or validate param model | COMMENT |
| LOW | browser_use/tools/registry/service.py | 168 | # Step 4: Create normalized wrapper function | COMMENT |
| LOW⚡ | browser_use/agent/service.py | 1777 | # Step 1: Remove well-formed <think>...</think> | COMMENT |
| LOW⚡ | browser_use/agent/service.py | 1779 | # Step 2: If there's an unmatched closing tag </think>, | COMMENT |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1810 | # Step 1: Focus the element using simple strategy | STRING |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1815 | # Step 2: Check if this element requires direct value assignment (date/time inputs) | STRING |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1828 | # Step 3: Clear existing text if requested (only for regular inputs that support typing) | STRING |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1834 | # Step 4: Type the text character by character using proper human-like key events | STRING |
| LOW⚡ | …owser_use/browser/watchdogs/default_action_watchdog.py | 1913 | # Step 2: Send char event (WITH text parameter) - this is crucial for text input | STRING |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/ci/infrastructure/test_registry_validation.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/ci/infrastructure/test_registry_core.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | examples/custom-functions/onepassword_2fa.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | examples/custom-functions/advanced_search.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | examples/custom-functions/file_upload.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | examples/integrations/agentmail/email_tools.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | examples/use-cases/extract_pdf_content.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | browser_use/config.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/__init__.py | 128 | __all__ = [ | CODE |
| LOW | browser_use/observability.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/cli.py | 27 | def _set_harness_client_env() -> None: | CODE |
| LOW | browser_use/utils.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | browser_use/beta/service.py | 4537 | def _set_file_system(self, file_system_path: str | None = None) -> None: | CODE |
| LOW⚡ | browser_use/beta/service.py | 4541 | def _set_screenshot_service(self) -> None: | CODE |
| LOW⚡ | browser_use/beta/service.py | 4545 | def _set_browser_use_version_and_source(self, source_override: str | None = None) -> None: | CODE |
| LOW⚡ | browser_use/beta/service.py | 5557 | def _setup_action_models(self) -> None: | CODE |
| LOW⚡ | browser_use/beta/service.py | 5561 | def _setup_action_models_for_page(self, page_url: str | None) -> None: | CODE |
| LOW⚡ | browser_use/beta/service.py | 5633 | def _update_available_file_paths(self, downloads: list[str]) -> None: | CODE |
| LOW | browser_use/beta/service.py | 89 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/beta/service.py | 5585 | async def _update_action_models_for_page(self, page_url: str) -> None: | CODE |
| LOW | browser_use/beta/__init__.py | 54 | __all__ = [ | CODE |
| LOW | browser_use/tools/service.py | 64 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/tools/service.py | 2138 | def set_coordinate_clicking(self, enabled: bool) -> None: | CODE |
| LOW | browser_use/tools/registry/service.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/tools/extraction/schema_utils.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/tools/extraction/__init__.py | 4 | __all__ = ['schema_dict_to_pydantic_model', 'ExtractionResult'] | CODE |
| LOW | browser_use/llm/models.py | 261 | __all__ = [ | CODE |
| LOW | browser_use/llm/__init__.py | 134 | __all__ = [ | CODE |
| LOW | browser_use/llm/oci_raw/__init__.py | 10 | __all__ = ['ChatOCIRaw'] | CODE |
| LOW | browser_use/llm/vercel/__init__.py | 3 | __all__ = ['ChatVercel'] | CODE |
| LOW | browser_use/llm/google/__init__.py | 3 | __all__ = ['ChatGoogle'] | CODE |
| LOW | browser_use/llm/tests/test_single_step.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/llm/tests/test_anthropic_cache.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/llm/groq/parser.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/llm/groq/chat.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/llm/browser_use/__init__.py | 3 | __all__ = ['ChatBrowserUse'] | CODE |
| LOW | browser_use/llm/browser_use/chat.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/llm/aws/__init__.py | 33 | __all__ = [ | CODE |
| LOW | browser_use/llm/litellm/__init__.py | 3 | __all__ = ['ChatLiteLLM'] | CODE |
| LOW | browser_use/llm/litellm/chat.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/llm/mistral/__init__.py | 5 | __all__ = ['ChatMistral'] | CODE |
| LOW | browser_use/llm/mistral/chat.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | browser_use/agent/service.py | 672 | def _update_available_file_paths(self, downloads: list[str]) -> None: | CODE |
| LOW⚡ | browser_use/agent/service.py | 691 | def _set_file_system(self, file_system_path: str | None = None) -> None: | CODE |
| LOW⚡ | browser_use/agent/service.py | 730 | def _set_screenshot_service(self) -> None: | CODE |
| LOW⚡ | browser_use/agent/service.py | 4005 | async def _update_action_models_for_page(self, page_url: str) -> None: | CODE |
| LOW | browser_use/agent/service.py | 86 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/agent/service.py | 749 | def _set_browser_use_version_and_source(self, source_override: str | None = None) -> None: | CODE |
| LOW | browser_use/agent/service.py | 772 | def _setup_action_models(self) -> None: | CODE |
| LOW | browser_use/agent/service.py | 1409 | def _update_plan_from_model_output(self, model_output: AgentOutput) -> None: | CODE |
| LOW | browser_use/agent/service.py | 1500 | def _update_loop_detector_actions(self) -> None: | CODE |
| LOW | browser_use/agent/service.py | 1519 | def _update_loop_detector_page_state(self, browser_state_summary: BrowserStateSummary) -> None: | CODE |
| LOW | browser_use/agent/gif.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/agent/__init__.py | 29 | __all__ = [ | CODE |
| LOW | browser_use/agent/judge.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/agent/views.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/agent/views.py | 199 | def _update_repetition_stats(self) -> None: | CODE |
| LOW | browser_use/agent/message_manager/service.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | browser_use/agent/message_manager/service.py | 553 | def _set_message_with_type(self, message: BaseMessage, message_type: Literal['system', 'state']) -> None: | CODE |
| LOW | browser_use/agent/message_manager/utils.py | 12 | logger = logging.getLogger(__name__) | CODE |
| 36 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/features/add_image_context.py | 21 | Convert image file to base64 string. Args: image_path: Path to the image file Returns: Base64 encoded st | STRING |
| HIGH | browser_use/llm/models.py | 95 | Factory function to create LLM instances from string names with API keys from environment. Args: model_name: St | STRING |
| HIGH | browser_use/agent/service.py | 794 | Generate a clean slug from skill title for action names Converts title to lowercase, removes special characters, repl | STRING |
| HIGH | browser_use/browser/events.py | 17 | Safely parse environment variable timeout values with robust error handling. Args: env_var: Environment variable n | STRING |
| HIGH | browser_use/browser/session.py | 1470 | Get CDP session for a target from the event-driven pool. With autoAttach=True, sessions are created automatically by | STRING |
| HIGH | browser_use/browser/session.py | 3851 | Get a CDP client attached to the target containing the specified frame. Builds a unified frame hierarchy from all tar | STRING |
| HIGH | browser_use/browser/cloud/cloud.py | 109 | Stop a cloud browser session. Args: session_id: Session ID to stop. If None, uses current session. Returns: | STRING |
| HIGH | browser_use/sandbox/views.py | 88 | Parse SSE event from JSON string with proper type discrimination Args: event_json: JSON string from SSE stream | STRING |
| HIGH | browser_use/dom/markdown_extractor.py | 30 | Extract clean markdown from browser content using enhanced DOM tree. This unified function can extract markdown using | STRING |
| HIGH | browser_use/dom/serializer/html_serializer.py | 249 | Serialize element attributes to HTML attribute string. Args: attributes: Dictionary of attribute names to values | STRING |
| HIGH | browser_use/skills/service.py | 168 | Execute a skill with the provided parameters. Auto-initializes if not already initialized. Parameters are validated a | STRING |
| HIGH | browser_use/skills/utils.py | 11 | Convert a list of ParameterSchema to a pydantic model for structured output Args: parameters: List of parameter sche | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .pre-commit-config.yaml | 59 | # best practices enforcement | COMMENT |
| LOW⚡ | examples/custom-functions/action_filters.py | 74 | # Note: page_filter is not directly supported anymore, so we'll just use domains | COMMENT |
| MEDIUM | examples/browser/playwright_integration.py | 271 | # Use Playwright's robust element selection and text extraction | COMMENT |
| MEDIUM | examples/cloud/04_proxy_usage.py | 285 | """Demonstrate comprehensive proxy usage.""" | STRING |
| MEDIUM | examples/cloud/05_search_api.py | 297 | """Demonstrate comprehensive Search API usage.""" | STRING |
| LOW | browser_use/tools/registry/views.py | 157 | # browser-use code doesn't use this at all, we just pass it down to your actions for convenience | COMMENT |
| LOW | browser_use/llm/schema.py | 122 | # No $ref, just return the optimized object | COMMENT |
| MEDIUM | browser_use/agent/service.py | 3596 | # Level 4: ax_name (accessible name) match - robust for dynamic SPAs with menus | COMMENT |
| MEDIUM | browser_use/agent/service.py | 2063 | """Log a comprehensive summary of the next action(s)""" | STRING |
| LOW⚡ | browser_use/agent/views.py | 518 | # If there are no valid sensitive data entries, just return the original value | COMMENT |
| LOW | browser_use/agent/message_manager/service.py | 168 | # If we have fewer items than the limit, just return all items | COMMENT |
| LOW | browser_use/agent/message_manager/service.py | 583 | # If there are no valid sensitive data entries, just return the original value | COMMENT |
| LOW | browser_use/mcp/server.py | 183 | # If we can't get parent process info, just return None | COMMENT |
| LOW⚡ | browser_use/mcp/client.py | 518 | # Object without properties - just return dict | COMMENT |
| LOW | browser_use/browser/session.py | 3865 | # If cross-origin iframes are disabled, just use the main session | COMMENT |
| MEDIUM | browser_use/browser/watchdogs/downloads_watchdog.py | 778 | # Download using JavaScript fetch to leverage browser cache | COMMENT |
| MEDIUM | browser_use/browser/watchdogs/downloads_watchdog.py | 1340 | # Download using JavaScript fetch to leverage browser cache | STRING |
| MEDIUM⚡ | browser_use/browser/watchdogs/dom_watchdog.py | 435 | # Get comprehensive page info from CDP with timeout | STRING |
| MEDIUM | browser_use/browser/watchdogs/dom_watchdog.py | 749 | """Get comprehensive page information using a single CDP call. | STRING |
| MEDIUM | …owser_use/browser/watchdogs/default_action_watchdog.py | 1662 | # Set the value using JavaScript with comprehensive event dispatching | COMMENT |
| MEDIUM | …owser_use/browser/watchdogs/default_action_watchdog.py | 2073 | # Execute JavaScript to trigger comprehensive event sequence | STRING |
| MEDIUM | …owser_use/browser/watchdogs/default_action_watchdog.py | 3068 | # Use more robust expansion: dispatch proper DOM events that trigger event listeners | STRING |
| MEDIUM | browser_use/sandbox/sandbox.py | 305 | # 4. Pickle parameters using cloudpickle for robust serialization | COMMENT |
| LOW | browser_use/dom/views.py | 498 | # just pass through shadow roots | COMMENT |
| MEDIUM | browser_use/dom/serializer/eval_serializer.py | 12 | # NOTE: Removed 'id' and 'class' to force more robust structural selectors | COMMENT |
| MEDIUM | browser_use/skills/browser_use.py | 43 | body = body.replace('# browser-harness', '# Browser Use', 1).replace('# Browser Harness', '# Browser Use', 1) | CODE |
| MEDIUM | browser_use/skills/browser_use.py | 44 | # Rebrand every mention except repo URLs (github.com/browser-use/browser-harness/...) | COMMENT |
| MEDIUM⚡ | browser_use/actor/element.py | 1082 | """Focus element using multiple strategies with robust fallbacks.""" | STRING |
| MEDIUM | browser_use/actor/mouse.py | 86 | """Scroll the page using robust CDP methods.""" | STRING |
| MEDIUM | browser_use/actor/playground/playground.py | 93 | # Test element interactions with robust implementations | COMMENT |
| MEDIUM | browser_use/actor/playground/playground.py | 102 | # Click the link using robust click method | COMMENT |
| MEDIUM | browser_use/tokens/service.py | 513 | """Log a comprehensive usage summary per model with colors and nice formatting""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/ci/test_variable_detection.py | 110 | attributes = {'name': 'first_name', 'placeholder': 'Enter your first name'} | CODE |
| LOW⚡ | tests/ci/test_variable_detection.py | 131 | result = _detect_from_value_pattern('John Doe') | CODE |
| LOW⚡ | tests/ci/test_variable_detection.py | 152 | attributes = {'name': 'billing_address', 'placeholder': 'Billing street address'} | CODE |
| LOW⚡ | tests/ci/test_variable_detection.py | 163 | attributes = {'name': 'comment', 'placeholder': 'Enter your comment'} | CODE |
| LOW⚡ | tests/ci/test_variable_detection.py | 207 | attributes = {'name': 'zip_code', 'placeholder': 'Zip or postal code'} | CODE |
| LOW⚡ | tests/ci/test_action_blank_page.py | 141 | assert 'skeleton' in description.lower() or 'placeholder' in description.lower(), ( | CODE |
| LOW⚡ | tests/ci/test_action_blank_page.py | 160 | assert 'skeleton' not in description.lower() and 'placeholder' not in description.lower(), ( | CODE |
| LOW⚡ | tests/ci/test_fallback_llm.py | 356 | placeholder = create_mock_llm('placeholder') | CODE |
| LOW | tests/ci/test_fallback_llm.py | 390 | placeholder = create_mock_llm('placeholder') | CODE |
| LOW | tests/ci/test_fallback_llm.py | 418 | placeholder = create_mock_llm('placeholder') | CODE |
| LOW | tests/ci/security/test_sensitive_data.py | 249 | 'google.com': {'email': 'user@example.com', 'password': 'google_pass'}, | CODE |
| LOW⚡ | examples/features/sensitive_data.py | 23 | company_credentials: dict[str, str] = {'telephone': '9123456789', 'email': 'user@example.com', 'name': 'John Doe'} | CODE |
| LOW⚡ | examples/features/sensitive_data.py | 23 | company_credentials: dict[str, str] = {'telephone': '9123456789', 'email': 'user@example.com', 'name': 'John Doe'} | CODE |
| LOW⚡ | examples/browser/playwright_integration.py | 332 | - Phone: "555-9876" | CODE |
| LOW | examples/use-cases/apply_to_job.py | 30 | "address": "123 Main St", | STRING |
| LOW | browser_use/llm/tests/test_single_step.py | 141 | 'model_id': os.getenv('OCI_MODEL_ID', 'placeholder'), | CODE |
| LOW | browser_use/llm/tests/test_single_step.py | 145 | 'compartment_id': os.getenv('OCI_COMPARTMENT_ID', 'placeholder'), | CODE |
| LOW | browser_use/agent/variable_detector.py | 149 | attributes.get('placeholder', ''), | CODE |
| LOW | browser_use/mcp/server.py | 913 | if element.attributes.get('placeholder'): | CODE |
| LOW | browser_use/mcp/server.py | 914 | elem_info['placeholder'] = element.attributes['placeholder'] | CODE |
| LOW | browser_use/dom/service.py | 109 | subtree_root.attributes.get('placeholder', '') | CODE |
| LOW | browser_use/dom/utils.py | 60 | 'placeholder', | CODE |
| LOW | browser_use/dom/views.py | 27 | 'placeholder', | CODE |
| LOW | browser_use/dom/views.py | 89 | 'placeholder', | CODE |
| LOW | browser_use/dom/views.py | 610 | for attr in ['value', 'aria-label', 'title', 'placeholder', 'alt']: | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1128 | if 'placeholder' in include_attributes and 'placeholder' not in attributes_to_include: | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1131 | attributes_to_include['placeholder'] = 'YYYY-MM-DD' | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1133 | attributes_to_include['placeholder'] = 'HH:MM' | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1135 | attributes_to_include['placeholder'] = 'YYYY-MM-DDTHH:MM' | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1137 | attributes_to_include['placeholder'] = 'YYYY-MM' | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1139 | attributes_to_include['placeholder'] = 'YYYY-W##' | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1142 | attributes_to_include['placeholder'] = '123-456-7890' | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1162 | attributes_to_include['placeholder'] = date_format | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1166 | attributes_to_include['placeholder'] = 'mm/dd/yyyy' | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1172 | attributes_to_include['placeholder'] = date_format | CODE |
| LOW⚡ | browser_use/dom/serializer/serializer.py | 1175 | attributes_to_include['placeholder'] = 'mm/dd/yyyy' | CODE |
| LOW | browser_use/dom/serializer/serializer.py | 1238 | protected_attrs = {'format', 'expected_format', 'placeholder', 'value', 'aria-label', 'title'} | CODE |
| LOW | browser_use/dom/serializer/serializer.py | 1273 | attrs_to_remove_if_text_matches = ['aria-label', 'placeholder', 'title'] | CODE |
| LOW | browser_use/dom/serializer/eval_serializer.py | 18 | 'placeholder', | CODE |
| LOW | skills/remote-browser/SKILL.md | 117 | browser-use input 5 "user@example.com" && browser-use input 6 "password" && browser-use click 7 | CODE |
| LOW | skills/cloud/references/browser-api.md | 74 | await page.fill("#email", "user@example.com") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/cloud/README.md | 82 | "api_key": "your_api_key" | CODE |
| HIGH | examples/apps/news-use/news_monitor.py | 48 | print(" Then run: export GEMINI_API_KEY='your-api-key-here'") | CODE |
| HIGH | examples/apps/msg-use/login.py | 22 | print("Please set it with: export GOOGLE_API_KEY='your-api-key-here'") | CODE |
| HIGH | browser_use/skills/README.md | 15 | service = SkillService(skill_ids=skill_ids, api_key='your-api-key') | CODE |
| HIGH | skills/open-source/references/integrations.md | 29 | "headers": { "x-browser-use-api-key": "your-api-key" } | CODE |
| HIGH | skills/open-source/references/integrations.md | 42 | "headers": { "x-browser-use-api-key": "your-api-key" } | CODE |
| HIGH | skills/open-source/references/integrations.md | 55 | "headers": { "x-browser-use-api-key": "your-api-key" } | CODE |
| HIGH | skills/cloud/references/browser-api.md | 24 | https://connect.browser-use.com/json/version?apiKey=YOUR_API_KEY | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | browser_use/browser/session_manager.py | 58 | # Focus recovery coordination - event-driven instead of polling | COMMENT |
| MEDIUM | browser_use/browser/session_manager.py | 370 | # Wait for recovery complete event (event-driven, not polling!) | COMMENT |
| MEDIUM | browser_use/browser/session_manager.py | 821 | # Use event-driven approach instead of polling for better performance | COMMENT |
| MEDIUM | browser_use/browser/session.py | 807 | # Launch local browser using event-driven approach | COMMENT |
| MEDIUM | browser_use/browser/session.py | 1849 | # Initialize event-driven session manager FIRST (before enabling autoAttach) | COMMENT |
| MEDIUM | browser_use/browser/session.py | 1862 | # This is the foundation of event-driven session management | COMMENT |
| MEDIUM | browser_use/browser/watchdog_base.py | 180 | # With event-driven sessions, Chrome will send detach/attach events | COMMENT |
| MEDIUM | skills/open-source/references/examples.md | 173 | # 5. Agent orchestrates using both | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/lint.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/ci/browser/test_session_start.py | 61 | # @pytest.mark.skip(reason="Race condition - DOMWatchdog tries to inject scripts into tab that's being closed") | COMMENT |
| LOW | tests/ci/browser/test_session_start.py | 81 | COMMENT | |
| LOW | tests/ci/browser/test_session_start.py | 341 | # Both should complete successfully | COMMENT |
| LOW | tests/ci/browser/test_session_start.py | 361 | # ), | COMMENT |
| LOW | tests/ci/browser/test_session_start.py | 381 | # ), | COMMENT |
| LOW | tests/ci/browser/test_session_start.py | 401 | # assert browser_session._cdp_client_root is not None | COMMENT |
| LOW | tests/ci/browser/test_session_start.py | 421 | # assert browser_session._cdp_client_root is not None | COMMENT |
| LOW | …astructure/test_registry_action_parameter_injection.py | 301 | # # Add a highlight via JavaScript | COMMENT |
| LOW | …astructure/test_registry_action_parameter_injection.py | 321 | # # Call remove_highlights | COMMENT |
| LOW | examples/features/sensitive_data.py | 21 | # Advanced case: domain-specific credentials with reusable data | COMMENT |
| LOW | examples/models/cerebras_example.py | 41 | COMMENT | |
| LOW | examples/apps/ad-use/ad_generator.py | 221 | COMMENT | |
| LOW | .github/workflows/claude.yml | 41 | COMMENT | |
| LOW | browser_use/tools/service.py | 861 | params: UploadFileAction, browser_session: BrowserSession, available_file_paths: list[str], file_system: FileSystem | COMMENT |
| LOW | browser_use/agent/views.py | 641 | # browser_config: BrowserConfig | None = None, | COMMENT |
| LOW | browser_use/agent/message_manager/service.py | 501 | # Store state message text for history | COMMENT |
| LOW | browser_use/agent/message_manager/service.py | 521 | # # Extract content for logging | COMMENT |
| LOW | browser_use/browser/events.py | 81 | ax_node=None, | COMMENT |
| LOW | browser_use/browser/events.py | 341 | # class SetViewportEvent(BaseEvent): | COMMENT |
| LOW | browser_use/browser/events.py | 661 | COMMENT | |
| LOW | browser_use/browser/profile.py | 1041 | # 'name': 'Consent-O-Matic', | COMMENT |
| LOW | browser_use/browser/session.py | 1721 | # self.event_bus.on(DialogCloseEvent, self._popups_watchdog.on_DialogCloseEvent) | COMMENT |
| LOW | browser_use/dom/serializer/clickable_elements.py | 161 | # if node.attributes: | COMMENT |
| LOW | browser_use/sync/service.py | 101 | pass | COMMENT |
| LOW | browser_use/sync/service.py | 121 | # for line in content.splitlines(): | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/features/rerun_history.py | 129 | # Display AI-generated summary (last result) | COMMENT |
| HIGH | examples/models/langchain/serializer.py | 137 | # as requested by the user | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/use-cases/buy_groceries.py | 53 | CODE | |
| LOW | examples/use-cases/phone_comparison.py | 65 | CODE | |
| LOW | browser_use/beta/service.py | 4229 | CODE | |
| LOW | browser_use/agent/service.py | 135 | CODE | |
| LOW | browser_use/agent/gif.py | 35 | CODE | |
| LOW | browser_use/agent/prompts.py | 29 | CODE | |
| LOW | browser_use/agent/prompts.py | 107 | CODE | |
| LOW | browser_use/agent/message_manager/service.py | 107 | CODE | |
| LOW | browser_use/agent/message_manager/service.py | 421 | CODE | |
| LOW | browser_use/browser/session.py | 165 | CODE | |
| LOW | browser_use/browser/session.py | 201 | CODE | |
| LOW | browser_use/browser/session.py | 262 | CODE | |
| LOW | browser_use/browser/session.py | 3333 | CODE | |
| LOW | browser_use/browser/session.py | 3590 | CODE | |
| LOW | browser_use/sandbox/sandbox.py | 215 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/setup.sh | 3 | # Usage: | COMMENT |
| LOW | bin/lint.sh | 3 | # Usage: | COMMENT |
| LOW | bin/test.sh | 3 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/use-cases/find_influencer_profiles.py | 39 | # you can also use other apis like exa, xAI, perplexity, etc. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | browser_use/observability.py | 113 | def my_function(param1, param2): | STRING |