🌐 Make websites accessible for AI agents. Automate tasks online with ease.
2997 matches across 20 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/ci/test_cli_cloud.py | 56 | def test_cloud_no_args_shows_usage(): |
| LOW | tests/ci/test_cli_cloud.py | 64 | def test_cloud_login_saves_key(tmp_path: Path): |
| LOW | tests/ci/test_cli_cloud.py | 83 | def test_cloud_logout_removes_key(tmp_path: Path): |
| LOW | tests/ci/test_cli_cloud.py | 132 | def test_cloud_rest_post_with_body(httpserver: HTTPServer): |
| LOW | tests/ci/test_cli_cloud.py | 158 | def test_cloud_rest_sends_auth_header(httpserver: HTTPServer): |
| LOW | tests/ci/test_cli_cloud.py | 195 | def test_cloud_rest_no_api_key_errors(tmp_path: Path): |
| LOW | tests/ci/test_cli_cloud.py | 263 | def test_cloud_url_construction(httpserver: HTTPServer): |
| LOW | tests/ci/test_ai_step.py | 10 | async def test_execute_ai_step_basic(): |
| LOW | tests/ci/test_ai_step.py | 46 | async def test_execute_ai_step_with_screenshot(): |
| LOW | tests/ci/test_ai_step.py | 95 | async def test_execute_ai_step_error_handling(): |
| LOW | tests/ci/test_screenshot_exclusion.py | 20 | def test_screenshot_excluded_with_use_vision_false(): |
| LOW | tests/ci/test_screenshot_exclusion.py | 34 | def test_screenshot_excluded_with_use_vision_true(): |
| LOW | tests/ci/test_screenshot_exclusion.py | 48 | def test_screenshot_included_with_use_vision_auto(): |
| LOW | tests/ci/test_screenshot_exclusion.py | 62 | def test_screenshot_excluded_with_custom_tools_and_use_vision_false(): |
| LOW | tests/ci/test_screenshot_exclusion.py | 89 | def test_screenshot_excluded_with_custom_tools_and_use_vision_true(): |
| LOW | tests/ci/test_screenshot_exclusion.py | 121 | def test_screenshot_included_with_custom_tools_and_use_vision_auto(): |
| LOW | tests/ci/test_screenshot_exclusion.py | 143 | def test_tools_exclude_action_method(): |
| LOW | tests/ci/test_screenshot_exclusion.py | 158 | def test_exclude_action_prevents_re_registration(): |
| LOW | tests/ci/test_cli_sessions.py | 27 | def test_session_flag_parsing(): |
| LOW | tests/ci/test_cli_sessions.py | 34 | def test_session_default_is_none(): |
| LOW | tests/ci/test_cli_sessions.py | 40 | def test_sessions_command_parsing(): |
| LOW | tests/ci/test_cli_sessions.py | 70 | def test_session_name_invalid(): |
| LOW | tests/ci/test_cli_sessions.py | 81 | def test_socket_path_includes_session(): |
| LOW | tests/ci/test_cli_sessions.py | 86 | def test_pid_path_includes_session(): |
| LOW | tests/ci/test_cli_sessions.py | 91 | def test_default_session_paths(): |
| LOW | tests/ci/test_cli_sessions.py | 103 | def test_main_utils_socket_path_agreement(): |
| LOW | tests/ci/test_cli_sessions.py | 109 | def test_main_utils_pid_path_agreement(): |
| LOW | tests/ci/test_cli_sessions.py | 115 | def test_main_utils_home_dir_agreement(): |
| LOW | tests/ci/test_cli_sessions.py | 120 | def test_path_agreement_with_env_override(tmp_path, monkeypatch): |
| LOW | tests/ci/test_cli_cloud_connect.py | 25 | def test_cloud_connect_mutual_exclusivity_cdp_url(): |
| LOW | tests/ci/test_cli_cloud_connect.py | 32 | def test_cloud_connect_mutual_exclusivity_profile(): |
| LOW | tests/ci/test_cli_cloud_connect.py | 39 | def test_cloud_connect_shows_in_usage(): |
| LOW | tests/ci/test_cli_cloud_connect.py | 45 | def test_cloud_connect_help_shows_in_epilog(): |
| 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): |
| LOW | tests/ci/test_action_record.py | 94 | async def test_start_recording_twice_raises(browser_session: BrowserSession, tmp_path: Path): |
| LOW | tests/ci/test_action_record.py | 106 | async def test_stop_without_start_returns_none(browser_session: BrowserSession): |
| LOW | tests/ci/test_action_record.py | 112 | async def test_on_browser_connected_degrades_gracefully_when_recording_fails( |
| LOW | tests/ci/test_action_record.py | 134 | async def test_profile_record_video_dir_still_works(page_url: str, tmp_path: Path): |
| LOW | tests/ci/test_action_record.py | 160 | def test_cli_argparse_record_start_stop(): |
| LOW | tests/ci/test_action_record.py | 180 | def test_cli_record_is_routed_to_browser_handler(): |
| LOW | tests/ci/test_variable_substitution.py | 38 | def test_substitute_single_variable(mock_llm): |
| LOW | tests/ci/test_variable_substitution.py | 62 | def test_substitute_multiple_variables(mock_llm): |
| LOW | tests/ci/test_variable_substitution.py | 95 | def test_substitute_partial_variables(mock_llm): |
| LOW | tests/ci/test_variable_substitution.py | 121 | def test_substitute_nonexistent_variable(mock_llm): |
| LOW | tests/ci/test_variable_substitution.py | 145 | def test_substitute_in_nested_dict(mock_llm): |
| LOW | tests/ci/test_variable_substitution.py | 202 | def test_substitute_preserves_original_history(mock_llm): |
| LOW | tests/ci/test_variable_substitution.py | 227 | def test_substitute_empty_variables(mock_llm): |
| LOW | tests/ci/test_variable_substitution.py | 248 | def test_substitute_same_value_multiple_times(mock_llm): |
| LOW | tests/ci/test_ax_name_matching.py | 21 | async def test_ax_name_matching_succeeds_when_hash_fails(httpserver): |
| LOW | tests/ci/test_ax_name_matching.py | 157 | async def test_ax_name_matching_requires_same_node_type(httpserver): |
| LOW | tests/ci/test_ax_name_matching.py | 244 | def test_match_level_enum_includes_ax_name(): |
| LOW | tests/ci/test_ax_name_matching.py | 251 | async def test_ax_name_matching_before_attribute_matching(httpserver): |
| LOW | tests/ci/test_ax_name_matching.py | 366 | def test_is_menu_opener_step_detects_aria_haspopup(): |
| LOW | tests/ci/test_ax_name_matching.py | 408 | def test_is_menu_opener_step_detects_guidewire_toggle(): |
| LOW | tests/ci/test_ax_name_matching.py | 450 | def test_is_menu_opener_step_returns_false_for_regular_element(): |
| LOW | tests/ci/test_ax_name_matching.py | 492 | def test_is_menu_item_element_detects_role_menuitem(): |
| LOW | tests/ci/test_ax_name_matching.py | 515 | def test_is_menu_item_element_detects_guidewire_class(): |
| LOW | tests/ci/test_ax_name_matching.py | 538 | def test_is_menu_item_element_returns_false_for_regular_element(): |
| LOW | tests/ci/test_markdown_chunking.py | 16 | def test_short_content_single_chunk(self): |
| LOW | tests/ci/test_markdown_chunking.py | 207 | def test_start_from_char_past_end_returns_empty(self): |
| 898 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/ci/test_cli_cloud.py | 11 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 13 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 51 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 53 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 108 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 110 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 209 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 211 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 258 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 260 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 281 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_cloud.py | 283 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_sessions.py | 22 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_sessions.py | 24 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_sessions.py | 60 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_sessions.py | 62 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_sessions.py | 76 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_sessions.py | 78 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_sessions.py | 98 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_cli_sessions.py | 100 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_action_record.py | 155 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_action_record.py | 157 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_markdown_chunking.py | 8 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_markdown_chunking.py | 10 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_markdown_chunking.py | 260 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_markdown_chunking.py | 262 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_markdown_chunking.py | 293 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_markdown_chunking.py | 295 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 44 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 46 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 64 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 66 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 88 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 90 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 111 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 113 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 134 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 136 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 152 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 154 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 172 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 174 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 189 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 191 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 205 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 207 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 223 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 225 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 255 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 257 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 266 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 268 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 282 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 284 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 297 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 299 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 316 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 318 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 332 | # --------------------------------------------------------------------------- |
| MEDIUM | tests/ci/test_agent_planning.py | 334 | # --------------------------------------------------------------------------- |
| 197 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/ci/evaluate_tasks.py | 105 | except Exception as browser_error: |
| LOW | tests/ci/evaluate_tasks.py | 118 | except Exception as agent_error: |
| LOW | tests/ci/evaluate_tasks.py | 137 | except Exception as llm_error: |
| LOW | tests/ci/evaluate_tasks.py | 187 | except Exception as e: |
| LOW | tests/ci/evaluate_tasks.py | 191 | except Exception: |
| LOW | tests/ci/evaluate_tasks.py | 269 | except Exception as e: |
| LOW | tests/ci/evaluate_tasks.py | 356 | except Exception as e: |
| LOW | tests/ci/interactions/test_dropdown_native.py | 515 | except Exception as e: |
| LOW | tests/ci/models/test_azure_responses_api.py | 262 | except Exception as e: |
| LOW | tests/ci/browser/test_true_cross_origin_click.py | 133 | except Exception as e: |
| LOW | tests/ci/browser/test_cdp_headers.py | 74 | except Exception: |
| LOW | tests/ci/browser/test_cdp_headers.py | 120 | except Exception: |
| LOW | tests/ci/browser/test_cdp_headers.py | 164 | except Exception: |
| LOW | tests/ci/browser/test_cross_origin_click.py | 135 | except Exception as e: |
| LOW | tests/ci/infrastructure/test_registry_validation.py | 485 | except Exception as e: |
| LOW | tests/ci/infrastructure/test_registry_validation.py | 497 | except Exception as e: |
| LOW | tests/ci/infrastructure/test_registry_validation.py | 509 | except Exception as e: |
| LOW | tests/ci/infrastructure/test_registry_validation.py | 546 | except Exception as e: |
| LOW | tests/ci/infrastructure/test_filesystem.py | 210 | except Exception: |
| LOW | tests/ci/infrastructure/test_filesystem.py | 221 | except Exception: |
| LOW | …astructure/test_registry_action_parameter_injection.py | 250 | except Exception as e: |
| LOW | tests/scripts/test_frame_hierarchy.py | 54 | except Exception: |
| LOW | tests/scripts/test_frame_hierarchy.py | 123 | except Exception as e: |
| LOW | tests/scripts/test_frame_hierarchy.py | 139 | except Exception: |
| LOW | tests/scripts/test_frame_hierarchy.py | 216 | except Exception as e: |
| LOW | tests/scripts/test_frame_hierarchy.py | 229 | except Exception: |
| LOW | examples/ui/gradio_demo.py | 77 | except Exception as e: |
| MEDIUM | examples/features/add_image_context.py | 103 | print(f'Error loading sample images: {e}') |
| LOW | examples/custom-functions/action_filters.py | 70 | except Exception: |
| LOW | examples/custom-functions/cua.py | 52 | except Exception as e: |
| LOW | examples/custom-functions/cua.py | 174 | except Exception as e: |
| MEDIUM | examples/custom-functions/cua.py | 175 | print(f'Error handling action {action}: {e}') |
| LOW | examples/custom-functions/cua.py | 272 | except Exception as e: |
| LOW | examples/custom-functions/cua.py | 313 | except Exception as e: |
| LOW | examples/custom-functions/file_upload.py | 63 | except Exception as e: |
| LOW | examples/custom-functions/parallel_agents.py | 118 | except Exception as e: |
| MEDIUM | examples/custom-functions/parallel_agents.py | 119 | print(f'Error creating subtasks: {e}') |
| LOW | examples/custom-functions/parallel_agents.py | 186 | except Exception as e: |
| LOW | examples/custom-functions/parallel_agents.py | 205 | except Exception as e: |
| LOW | examples/custom-functions/parallel_agents.py | 214 | except Exception as e: |
| LOW | examples/custom-functions/parallel_agents.py | 221 | except Exception as e: |
| LOW | examples/custom-functions/parallel_agents.py | 238 | except Exception: |
| LOW | examples/models/oci_models.py | 117 | except Exception as e: |
| LOW | examples/models/oci_models.py | 149 | except Exception as e: |
| LOW | examples/models/oci_models.py | 175 | except Exception as e: |
| LOW | examples/models/oci_models.py | 202 | except Exception as e: |
| LOW | examples/models/oci_models.py | 241 | except Exception as e: |
| LOW | examples/models/aws.py | 91 | except Exception as e: |
| LOW | examples/models/langchain/chat.py | 178 | except Exception as e: |
| LOW | examples/models/langchain/chat.py | 190 | except Exception as e: |
| LOW | examples/integrations/gmail_2fa_integration.py | 77 | except Exception as e: |
| LOW | examples/integrations/gmail_2fa_integration.py | 151 | except Exception as e: |
| LOW | examples/integrations/gmail_2fa_integration.py | 174 | except Exception as e: |
| LOW | examples/integrations/gmail_2fa_integration.py | 264 | except Exception as e: |
| LOW | examples/integrations/discord/discord_api.py | 74 | except Exception as e: |
| MEDIUM | examples/integrations/discord/discord_api.py | 75 | print(f'Error during bot startup: {e}') |
| LOW | examples/integrations/discord/discord_api.py | 89 | except Exception as e: |
| MEDIUM | examples/integrations/discord/discord_api.py | 90 | print(f'Error sending start message: {e}') |
| LOW | examples/integrations/discord/discord_api.py | 95 | except Exception as e: |
| LOW | examples/integrations/discord/discord_api.py | 102 | except Exception as e: |
| 638 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | tests/scripts/debug_iframe_scrolling.py | 36 | "evaluation_previous_goal": null, |
| HIGH | browser_use/tools/service.py | 212 | while ((match = re.exec(fullText)) !== null) { |
| HIGH | browser_use/tools/service.py | 221 | if (no.offset <= match.index && no.offset + no.length > match.index) { |
| HIGH | browser_use/tools/service.py | 226 | matches.push({ |
| HIGH | browser_use/tools/service.py | 193 | if (text && text.trim()) { |
| HIGH | browser_use/tools/service.py | 194 | nodeOffsets.push({offset: fullText.length, length: text.length, node: node}); |
| HIGH | browser_use/tools/service.py | 242 | while (current && current !== document.body && current !== document) { |
| HIGH | browser_use/tools/service.py | 246 | else if (current.className && typeof current.className === 'string') { |
| HIGH | browser_use/tools/service.py | 275 | if (ATTRIBUTES && ATTRIBUTES.length > 0) { |
| HIGH | browser_use/tools/service.py | 286 | if (val !== null) { |
| HIGH | browser_use/tools/service.py | 292 | results.push(item); |
| HIGH | browser_use/tools/service.py | 926 | params={'expression': 'window.scrollY || window.pageYOffset || 0'}, session_id=cdp_session.session_id |
| HIGH | browser_use/tools/extraction/schema_utils.py | 121 | # so absent fields serialize as null, not an out-of-set value. |
| HIGH | browser_use/mcp/server.py | 945 | f'(function(){{ const el = document.querySelector({json.dumps(selector)}); return el ? el.outerHTML : null; }})()' |
| HIGH | browser_use/browser/profile.py | 1123 | if (checkInitialized && initialized) { |
| HIGH | browser_use/browser/profile.py | 1135 | const result = await chrome.storage.local.get({{ settings: null }}); |
| HIGH | browser_use/browser/profile.py | 1146 | if (checkInitialized && initialized) {{ |
| HIGH | browser_use/browser/session.py | 2850 | const scrollX = window.pageXOffset || document.documentElement.scrollLeft || 0; |
| HIGH | browser_use/browser/session.py | 2851 | const scrollY = window.pageYOffset || document.documentElement.scrollTop || 0; |
| HIGH | browser_use/browser/session.py | 2972 | const scrollX = window.pageXOffset || document.documentElement.scrollLeft || 0; |
| HIGH | browser_use/browser/session.py | 2973 | const scrollY = window.pageYOffset || document.documentElement.scrollTop || 0; |
| HIGH | browser_use/browser/demo_mode.py | 53 | panel: null, |
| HIGH | browser_use/browser/demo_mode.py | 54 | list: null, |
| HIGH | browser_use/browser/demo_mode.py | 57 | toggleButton: null, |
| HIGH | browser_use/browser/demo_mode.py | 93 | const host = document.body || document.documentElement; |
| HIGH | browser_use/browser/demo_mode.py | 102 | if (document.body && node.parentNode !== document.body) { |
| HIGH | browser_use/browser/demo_mode.py | 577 | return saved ? Number(saved) : null; |
| HIGH | browser_use/browser/demo_mode.py | 579 | return null; |
| HIGH | browser_use/browser/demo_mode.py | 630 | if (!detail) return null; |
| HIGH | browser_use/browser/demo_mode.py | 638 | if (!entry.metadata || typeof entry.metadata !== 'object') { |
| HIGH | browser_use/browser/demo_mode.py | 642 | entry.timestamp = entry.timestamp || new Date().toISOString(); |
| HIGH | browser_use/browser/demo_mode.py | 649 | state.messages.push(entry); |
| HIGH | browser_use/browser/demo_mode.py | 717 | if (id && expanded.has(id)) { |
| HIGH | browser_use/browser/demo_mode.py | 760 | frame = requestAnimationFrame(() => fn.apply(null, args)); |
| HIGH | browser_use/browser/watchdogs/aboutblank_watchdog.py | 203 | const imgWidth = img.offsetWidth || 300; |
| HIGH | browser_use/browser/watchdogs/aboutblank_watchdog.py | 204 | const imgHeight = img.offsetHeight || 300; |
| HIGH | browser_use/browser/watchdogs/storage_state_watchdog.py | 283 | f' if (window.location && window.location.origin !== {json.dumps(origin_value)}) return;\n' |
| HIGH | browser_use/browser/watchdogs/storage_state_watchdog.py | 299 | f' if (window.location && window.location.origin !== {json.dumps(origin_value)}) return;\n' |
| HIGH | browser_use/browser/watchdogs/dom_watchdog.py | 172 | if (isImageUrl && loadingDuration > 3000) continue; |
| HIGH | browser_use/browser/watchdogs/dom_watchdog.py | 174 | pending.push({ |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 635 | if (assocLabel && (assocLabel === atPoint || assocLabel.contains(atPoint))) { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 641 | if (!isClickable && target.tagName === 'INPUT') { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 643 | for (let i = 0; i < 3 && ancestor; i++) { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 653 | if (!isClickable && target.tagName === 'LABEL') { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 654 | if (target.htmlFor && atPoint.tagName === 'INPUT' && atPoint.id === target.htmlFor) { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 658 | if (!isClickable && atPoint.tagName === 'INPUT' && target.contains(atPoint)) { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 1379 | } else if (this.value !== undefined) { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2020 | if (this.value !== undefined) { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2026 | if (desc && desc.set) { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2122 | if (element._reactInternalFiber || element._reactInternalInstance || element.__reactInternalInstance) { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2141 | if (element.__vue__ || element._vnode || element.__vueParentComponent) { |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2254 | const doc = this.contentDocument || this.contentWindow.document; |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2256 | const scrollElement = doc.documentElement || doc.body; |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2271 | return {{success: false, error: e.toString()}}; |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2753 | null, |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2919 | return null; |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 2924 | if (currentDepth >= maxDepth) return null; |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 3449 | })).filter(opt => opt.text || opt.value); |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 3458 | return null; // Not a dropdown element |
| HIGH | …owser_use/browser/watchdogs/default_action_watchdog.py | 3463 | if (currentDepth >= maxDepth) return null; |
| 23 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/ci/conftest.py | 47 | # Create a temporary directory for test config (but not for extensions) |
| MEDIUM | tests/ci/test_variable_substitution.py | 149 | # Create a more complex action with nested structure |
| MEDIUM | tests/ci/test_ax_name_matching.py | 39 | # Create a mock LLM for summary |
| MEDIUM | tests/ci/test_ax_name_matching.py | 61 | # Create an element with DIFFERENT hash/xpath but SAME ax_name as the real element |
| MEDIUM | tests/ci/test_file_system_docx.py | 49 | # Create an external DOCX file |
| MEDIUM | tests/ci/test_file_system_docx.py | 111 | # Create a corrupted DOCX file |
| MEDIUM | tests/ci/test_markdown_extractor.py | 62 | # Create a JSON blob > 100 chars |
| MEDIUM | tests/ci/test_file_system_images.py | 27 | # Create an external image file |
| MEDIUM | tests/ci/test_file_system_images.py | 51 | # Create an external image file |
| MEDIUM | tests/ci/test_file_system_images.py | 110 | # Create a large image (2000x2000) |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 177 | # Create a mock LLM for summary |
| 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) |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 259 | # Create a mock LLM for summary (will be reached after the step succeeds) |
| 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) |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 460 | # Create a mock LLM for summary that returns partial success |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 599 | # Create a mock LLM for summary |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 621 | # Create an interacted element that matches the button on the page |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 746 | # Create an interacted element |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 1075 | # Create a mock LLM for summary |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 1097 | # Create an element that matches the page |
| MEDIUM | tests/ci/test_rerun_ai_summary.py | 1201 | # Create an element that WON'T match (different identifiers) |
| MEDIUM | tests/ci/test_fallback_llm.py | 359 | # Create a failing primary and succeeding fallback |
| MEDIUM | tests/ci/test_tools.py | 115 | # Define a custom action |
| MEDIUM | tests/ci/test_tools.py | 274 | # Create a temporary directory for the file system |
| MEDIUM | tests/ci/security/test_upload_file_containment.py | 158 | # Create a local managed file with a basename that collides with the |
| MEDIUM | tests/ci/security/test_domain_filtering.py | 13 | # Create a context config with a sample allowed domain |
| MEDIUM | tests/ci/security/test_domain_filtering.py | 475 | # Create a list of 100 domains |
| MEDIUM | tests/ci/security/test_domain_filtering.py | 502 | # Create a list with 100 domains (some with www, some without) |
| MEDIUM | tests/ci/security/test_domain_filtering.py | 531 | # Create a large allowlist |
| MEDIUM | tests/ci/security/test_sensitive_data.py | 44 | # Create a simple Pydantic model with sensitive data placeholders |
| MEDIUM | tests/ci/security/test_sensitive_data.py | 77 | # Create a simple Pydantic model with sensitive data placeholders |
| MEDIUM | tests/ci/browser/test_true_cross_origin_click.py | 39 | # Create main page with TRUE cross-origin iframe pointing to example.com |
| MEDIUM | tests/ci/browser/test_session_start.py | 89 | # # Create a new tab explicitly |
| MEDIUM | tests/ci/browser/test_session_start.py | 152 | # Create a reusable profile |
| MEDIUM | tests/ci/browser/test_session_start.py | 188 | # Create a reusable session with keep_alive |
| MEDIUM | tests/ci/browser/test_cross_origin_click.py | 48 | # Create main page with iframe pointing to our test server |
| MEDIUM | tests/ci/infrastructure/test_registry_validation.py | 416 | # Create a custom param model for select_cell_or_range |
| MEDIUM | tests/ci/infrastructure/test_registry_validation.py | 425 | # Define the function without using our registry - this will be a helper function |
| MEDIUM | tests/ci/infrastructure/test_registry_validation.py | 515 | # Create the model instance |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 611 | # Create a large file |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 711 | # Create a products CSV file |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 845 | # Create a file to ensure directory has content |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 923 | # Create a state with unknown file type |
| MEDIUM | tests/ci/infrastructure/test_filesystem.py | 1220 | # Create a notes file |
| MEDIUM | …astructure/test_registry_action_parameter_injection.py | 263 | # Create a new tab |
| MEDIUM | …astructure/test_registry_action_parameter_injection.py | 343 | # Create a registry |
| MEDIUM | …astructure/test_registry_action_parameter_injection.py | 370 | # Create an instance with the simple_action |
| MEDIUM | tests/scripts/debug_iframe_scrolling.py | 29 | # Create the sequence of actions for the mock LLM |
| MEDIUM | tests/scripts/debug_iframe_scrolling.py | 122 | # Create an agent with the mock LLM |
| MEDIUM | tests/scripts/debug_iframe_scrolling.py | 178 | # Create the action model for navigation |
| MEDIUM | examples/features/sensitive_data.py | 22 | # Define a single credential set that can be reused |
| MEDIUM | examples/custom-functions/action_filters.py | 100 | # Create the agent |
| MEDIUM | examples/custom-functions/file_upload.py | 88 | # Create the agent with file upload capability |
| MEDIUM | examples/custom-functions/parallel_agents.py | 156 | # Create a unique temp directory for this agent's browser data |
| MEDIUM | examples/custom-functions/parallel_agents.py | 178 | # Create a new browser session for each agent with the custom profile |
| MEDIUM | examples/models/oci_models.py | 192 | # Create a simple agent to test the model |
| MEDIUM | examples/models/langchain/example.py | 23 | # Create a LangChain model (OpenAI) |
| MEDIUM | examples/models/langchain/example.py | 32 | # Create a simple task |
| MEDIUM | examples/cloud/01_basic_task.py | 147 | # Define a simple search task (using DuckDuckGo to avoid captchas) |
| MEDIUM | examples/getting_started/04_multi_step_task.py | 35 | # Define a multi-step task |
| 45 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/ci/test_ai_step.py | 57 | # Check if any message has image content |
| LOW | tests/ci/conftest.py | 131 | # Check if output_format is provided (2nd argument or in kwargs) |
| LOW | tests/ci/evaluate_tasks.py | 72 | # Check if Google API key is available for judge LLM |
| LOW | tests/ci/evaluate_tasks.py | 205 | # Set environment to reduce noise in subprocess |
| LOW | tests/ci/evaluate_tasks.py | 325 | # Output results for GitHub Actions |
| LOW | tests/ci/models/model_test_helper.py | 104 | # Check if SUCCESS appears in any step (indicating button was clicked) |
| LOW | tests/ci/browser/test_true_cross_origin_click.py | 81 | # Check if element is from cross-origin iframe (example.com) |
| LOW | tests/ci/browser/test_true_cross_origin_click.py | 97 | # Check if cross-origin iframe loaded |
| LOW | tests/ci/browser/test_screenshot.py | 146 | # Check if browser state has screenshot path |
| LOW | tests/ci/browser/test_dom_serializer.py | 162 | # Check if this is an iframe tag (not content inside iframe) |
| LOW | tests/ci/browser/test_dom_serializer.py | 165 | # Check if element has an ID attribute |
| LOW | tests/ci/browser/test_session_start.py | 292 | # Check if BrowserConnectedEvent was dispatched |
| LOW | tests/ci/browser/test_cross_origin_click.py | 93 | # Check if element is from iframe (identified by id attributes we set) |
| LOW | tests/ci/browser/test_cross_origin_click.py | 106 | # Check if iframe elements were found |
| LOW | tests/ci/infrastructure/test_filesystem.py | 372 | # Read file with invalid name - gets auto-sanitized to invalidname.md, but file doesn't exist |
| LOW | tests/scripts/test_frame_hierarchy.py | 50 | # Check if target has active sessions using the public API |
| LOW | tests/scripts/test_frame_hierarchy.py | 177 | # Check if this should be the main frame |
| LOW | tests/scripts/debug_iframe_scrolling.py | 260 | # Check if lower form fields appear after scroll |
| LOW | examples/custom-functions/action_filters.py | 78 | # Check if it's a login page |
| LOW | examples/custom-functions/cua.py | 340 | # Check if OpenAI API key is available |
| LOW | examples/custom-functions/file_upload.py | 49 | # Check if it's a file input element |
| LOW | examples/custom-functions/parallel_agents.py | 271 | # Print results |
| LOW | examples/custom-functions/parallel_agents.py | 287 | # Check if Google API key is available |
| LOW | examples/custom-functions/parallel_agents.py | 295 | # Check if API key looks valid (Google API keys are typically 39 characters) |
| LOW | examples/sandbox/example.py | 49 | # Check if API keys are set |
| LOW | examples/cloud/01_basic_task.py | 131 | # Check if finished |
| LOW | .github/workflows/eval-on-pr.yml | 48 | # Check if trigger was was successful |
| LOW | browser_use/config.py | 328 | # Check if it's already in DB-style format |
| LOW | browser_use/config.py | 332 | # Check if the values are DB-style entries (have UUIDs as keys) |
| LOW | browser_use/logging_config.py | 82 | # Check if handlers are already set up |
| LOW | browser_use/init_cmd.py | 172 | # Check if file already exists |
| LOW | browser_use/init_cmd.py | 182 | # Write file |
| LOW | browser_use/init_cmd.py | 354 | # Write file |
| LOW | browser_use/__init__.py | 30 | # Check if the event loop is closed before calling the original |
| LOW | browser_use/observability.py | 30 | # Check if we're in debug mode |
| LOW | browser_use/cli.py | 1281 | # Check if browser PID is available |
| LOW | browser_use/cli.py | 1282 | # Check if we have a CDP client |
| LOW | browser_use/cli.py | 2240 | # Check if file already exists |
| LOW | browser_use/cli.py | 2250 | # Write file |
| LOW | browser_use/cli.py | 43 | # Check if --template or -t flag is present without a value |
| LOW | browser_use/cli.py | 116 | # Write file with safety checks |
| LOW | browser_use/cli.py | 1025 | # Set flags to indicate the agent is running |
| LOW | browser_use/cli.py | 1248 | # Check if browser session has a CDP client |
| LOW | browser_use/cli.py | 1381 | # Check if agent has tasks |
| LOW | browser_use/cli.py | 1425 | # Check if this step had an error |
| LOW | browser_use/cli.py | 1751 | # Check if already authenticated |
| LOW | browser_use/cli.py | 2045 | # Check if MCP server mode is activated |
| LOW | browser_use/cli.py | 2066 | # Check if prompt mode is activated |
| LOW | browser_use/cli.py | 2223 | # Write file |
| LOW | browser_use/cli.py | 2352 | # Write file |
| LOW | browser_use/utils.py | 341 | # Set flag to indicate we're waiting for input |
| LOW | browser_use/tools/service.py | 539 | # Check if it's specifically a RuntimeError about CDP client |
| LOW | browser_use/tools/service.py | 711 | # Check if result contains validation error (e.g., trying to click <select> or file input) |
| LOW | browser_use/tools/service.py | 842 | # Check if file is in available_file_paths (user-provided or downloaded files) |
| LOW | browser_use/tools/service.py | 855 | # Check if the file is actually managed by the FileSystem service |
| LOW | browser_use/tools/service.py | 1671 | # Check if the selection was successful |
| LOW | browser_use/tools/service.py | 2212 | # Check if this is a registered action |
| LOW | browser_use/tools/utils.py | 52 | # Check if hidden |
| LOW | browser_use/tools/registry/service.py | 107 | # Check if this is a Type 1 pattern (first param is BaseModel) |
| LOW | browser_use/tools/registry/service.py | 124 | # Check if types are compatible (exact match, subclass, or generic list) |
| 133 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/ci/test_ai_step.py | 46 | |
| LOW | tests/ci/test_ai_step.py | 50 | |
| LOW | tests/ci/test_cli_lifecycle.py | 32 | |
| LOW | tests/ci/evaluate_tasks.py | 201 | |
| LOW | tests/ci/test_extract_images.py | 202 | |
| LOW | tests/ci/test_extract_images.py | 250 | |
| LOW | tests/ci/test_extract_images.py | 222 | |
| LOW | tests/ci/test_extract_images.py | 270 | |
| LOW | tests/ci/test_cli_upload.py | 251 | |
| LOW | tests/ci/security/test_sensitive_data.py | 276 | |
| LOW | tests/ci/security/test_sensitive_data.py | 368 | |
| LOW | tests/ci/browser/test_true_cross_origin_click.py | 32 | |
| LOW | tests/ci/browser/test_dom_serializer.py | 76 | |
| LOW | tests/ci/browser/test_dom_serializer.py | 267 | |
| LOW | tests/ci/browser/test_dom_serializer.py | 347 | |
| LOW | tests/ci/browser/test_cdp_headers.py | 131 | |
| LOW | tests/ci/browser/test_cross_origin_click.py | 32 | |
| LOW | tests/scripts/test_frame_hierarchy.py | 12 | |
| LOW | tests/scripts/debug_iframe_scrolling.py | 24 | |
| LOW | tests/scripts/debug_iframe_scrolling.py | 130 | |
| LOW | examples/features/rerun_history.py | 58 | |
| LOW | examples/custom-functions/cua.py | 38 | |
| LOW | examples/custom-functions/parallel_agents.py | 35 | |
| LOW | examples/models/langchain/chat.py | 35 | |
| LOW | examples/models/langchain/chat.py | 100 | |
| LOW | examples/integrations/gmail_2fa_integration.py | 80 | |
| LOW | examples/integrations/discord/discord_api.py | 77 | |
| LOW | examples/integrations/slack/slack_api.py | 48 | |
| LOW | examples/cloud/03_structured_output.py | 175 | |
| LOW | examples/cloud/03_structured_output.py | 325 | |
| LOW | examples/cloud/04_proxy_usage.py | 284 | |
| LOW | examples/cloud/05_search_api.py | 296 | |
| LOW | examples/apps/ad-use/ad_generator.py | 184 | |
| LOW | examples/apps/news-use/news_monitor.py | 66 | |
| LOW | examples/apps/news-use/news_monitor.py | 251 | |
| LOW | examples/apps/news-use/news_monitor.py | 118 | |
| LOW | examples/apps/msg-use/scheduler.py | 44 | |
| LOW | examples/apps/msg-use/scheduler.py | 175 | |
| LOW | browser_use/config.py | 370 | |
| LOW | browser_use/logging_config.py | 64 | |
| LOW | browser_use/logging_config.py | 95 | |
| LOW | browser_use/init_cmd.py | 217 | |
| LOW | browser_use/cli.py | 354 | |
| LOW | browser_use/cli.py | 1728 | |
| LOW | browser_use/cli.py | 879 | |
| LOW | browser_use/cli.py | 1134 | |
| LOW | browser_use/cli.py | 1236 | |
| LOW | browser_use/cli.py | 1322 | |
| LOW | browser_use/cli.py | 1375 | |
| LOW | browser_use/utils.py | 34 | |
| LOW | browser_use/utils.py | 392 | |
| LOW | browser_use/utils.py | 418 | |
| LOW | browser_use/utils.py | 497 | |
| LOW | browser_use/utils.py | 599 | |
| LOW | browser_use/utils.py | 614 | |
| LOW | browser_use/utils.py | 393 | |
| LOW | browser_use/utils.py | 421 | |
| LOW | browser_use/utils.py | 395 | |
| LOW | browser_use/utils.py | 423 | |
| LOW | browser_use/tools/service.py | 145 | |
| 220 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| CRITICAL | browser_use/cli.py | 1387 | message_history = self.agent._message_manager.state.history.get_messages() |
| CRITICAL | browser_use/agent/service.py | 2796 | registered_action = self.tools.registry.registry.actions.get(action_name) |
| CRITICAL | browser_use/browser/session_manager.py | 473 | await self.browser_session._cdp_client_root.send.Runtime.runIfWaitingForDebugger(session_id=session_id) |
| CRITICAL | browser_use/browser/session_manager.py | 395 | await self.browser_session._cdp_client_root.send.Target.setAutoAttach( |
| CRITICAL | browser_use/browser/session_manager.py | 694 | await self.browser_session._cdp_client_root.send.Target.activateTarget(params={'targetId': new_target_id}) |
| CRITICAL | browser_use/browser/watchdogs/permissions_watchdog.py | 37 | await self.browser_session.cdp_client.send.Browser.grantPermissions( |
| CRITICAL | browser_use/browser/watchdogs/popups_watchdog.py | 56 | await self.browser_session._cdp_client_root.send.Page.enable() |
| CRITICAL | browser_use/browser/watchdogs/popups_watchdog.py | 91 | self.browser_session._cdp_client_root.send.Page.handleJavaScriptDialog( |
| CRITICAL | browser_use/browser/watchdogs/popups_watchdog.py | 111 | self.browser_session._cdp_client_root.send.Page.handleJavaScriptDialog( |
| CRITICAL | browser_use/browser/watchdogs/popups_watchdog.py | 134 | self.browser_session._cdp_client_root.register.Page.javascriptDialogOpening(handle_dialog) # type: ignore[arg-type |
| CRITICAL | browser_use/browser/watchdogs/recording_watchdog.py | 83 | self.browser_session.cdp_client.register.Page.screencastFrame(self.on_screencastFrame) |
| CRITICAL | browser_use/browser/watchdogs/recording_watchdog.py | 111 | await self.browser_session.cdp_client.send.Page.stopScreencast(session_id=session_id) |
| CRITICAL | browser_use/browser/watchdogs/recording_watchdog.py | 150 | await self.browser_session.cdp_client.send.Page.stopScreencast(session_id=self._current_session_id) |
| CRITICAL | browser_use/browser/watchdogs/recording_watchdog.py | 211 | await self.browser_session.cdp_client.send.Page.screencastFrameAck( |
| CRITICAL | browser_use/browser/watchdogs/har_recording_watchdog.py | 178 | version_info = await self.browser_session.cdp_client.send.Browser.getVersion() |
| CRITICAL | browser_use/browser/watchdogs/har_recording_watchdog.py | 393 | resp = await self_ref.browser_session.cdp_client.send.Network.getResponseBody( |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/ci/test_ax_name_matching.py | 81 | # Step 1: Navigate to test page |
| LOW | tests/ci/test_ax_name_matching.py | 104 | # Step 2: Click on element that has different hash/xpath but same ax_name |
| LOW | tests/ci/test_rerun_ai_summary.py | 357 | # Step 1: Navigate to test page |
| LOW | tests/ci/test_rerun_ai_summary.py | 380 | # Step 2: Click on element that won't be found (different identifiers) |
| LOW | tests/ci/test_rerun_ai_summary.py | 486 | # Step 1: Navigate to test page |
| LOW | tests/ci/test_rerun_ai_summary.py | 509 | # Step 2: Click on element that won't exist on current page (different hash/attributes) |
| LOW | tests/ci/test_rerun_ai_summary.py | 636 | # Step 1: Navigate to test page |
| LOW | tests/ci/test_rerun_ai_summary.py | 659 | # Step 2: Click login button (first click) |
| LOW | tests/ci/test_rerun_ai_summary.py | 682 | # Step 3: Click login button AGAIN (redundant retry - same element, same action) |
| LOW | tests/ci/test_rerun_ai_summary.py | 1112 | # Step 1: Navigate to test page |
| LOW | tests/ci/test_rerun_ai_summary.py | 1135 | # Step 2: Click button (needs element matching, should wait for elements) |
| LOW | tests/ci/test_rerun_ai_summary.py | 1216 | # Step 1: Navigate |
| LOW | tests/ci/test_rerun_ai_summary.py | 1234 | # Step 2: Click non-matching element (will fail and retry) |
| LOW | tests/ci/test_file_system_llm_integration.py | 299 | # Step 1: Create external image |
| LOW | tests/ci/test_file_system_llm_integration.py | 304 | # Step 2: Read via FileSystem |
| LOW | tests/ci/test_file_system_llm_integration.py | 310 | # Step 3: Create ActionResult (simulating tools/service.py) |
| LOW | tests/ci/test_file_system_llm_integration.py | 318 | # Step 4: Process in MessageManager |
| LOW | tests/ci/test_file_system_llm_integration.py | 328 | # Step 5: Create message with AgentMessagePrompt |
| LOW | tests/ci/test_file_system_llm_integration.py | 357 | # Step 1: Create DOCX |
| LOW | tests/ci/test_file_system_llm_integration.py | 364 | # Step 2: Read it |
| LOW | tests/ci/test_file_system_llm_integration.py | 367 | # Step 3: Create ActionResult (simulating tools/service.py) |
| LOW | tests/ci/test_file_system_llm_integration.py | 374 | # Step 4: Process in MessageManager |
| LOW | tests/ci/infrastructure/test_url_shortening.py | 121 | # Step 1: Input processing with URL shortening |
| LOW | tests/ci/infrastructure/test_url_shortening.py | 134 | # Step 2: Simulate agent output with shortened URL |
| LOW | tests/ci/infrastructure/test_url_shortening.py | 149 | # Step 3: Output processing with URL restoration (modifies agent_output in-place) |
| LOW | examples/features/rerun_history.py | 73 | # Step 1: Run the agent and save history |
| LOW | examples/features/rerun_history.py | 80 | # Step 2: Detect variables in the saved history |
| LOW | examples/features/rerun_history.py | 91 | # Step 3: Rerun the history with substituted values |
| LOW | examples/integrations/gmail_2fa_integration.py | 208 | # Step 1: Check and validate credentials |
| LOW | examples/integrations/gmail_2fa_integration.py | 228 | # Step 2: Initialize Gmail service and test authentication |
| LOW | examples/integrations/gmail_2fa_integration.py | 242 | # Step 3: Initialize tools with authenticated service |
| LOW | examples/integrations/gmail_2fa_integration.py | 256 | # Step 4: Test Gmail functionality |
| LOW | examples/integrations/gmail_2fa_integration.py | 278 | # Step 5: Demonstrate 2FA code finding |
| LOW | examples/integrations/gmail_2fa_integration.py | 292 | # Step 6: Simulate complete login flow |
| LOW | examples/browser/playwright_integration.py | 314 | # Step 1: Start Chrome with CDP debugging |
| LOW | examples/browser/playwright_integration.py | 318 | # Step 2: Connect Playwright to the same Chrome instance |
| LOW | examples/browser/playwright_integration.py | 321 | # Step 3: Create Browser-Use session connected to same Chrome |
| LOW | examples/browser/playwright_integration.py | 324 | # Step 4: Create AI agent with our custom Playwright-powered tools |
| LOW | examples/browser/playwright_integration.py | 348 | # Step 5: Run the agent - it will use both Browser-Use actions and our custom Playwright actions |
| LOW | examples/use-cases/shopping.py | 25 | ### Step 1: Navigate to the Website |
| LOW | examples/use-cases/shopping.py | 31 | ### Step 2: Add Items to the Basket |
| LOW | examples/use-cases/shopping.py | 66 | ### Step 3: Handling Unavailable Items |
| LOW | examples/use-cases/shopping.py | 79 | ### Step 4: Adjusting for Minimum Order Requirement |
| LOW | examples/use-cases/shopping.py | 87 | ### Step 5: Select Delivery Window |
| LOW | examples/use-cases/shopping.py | 93 | ### Step 6: Checkout |
| LOW | examples/use-cases/shopping.py | 102 | ### Step 7: Confirm Order & Output Summary |
| LOW | examples/cloud/01_basic_task.py | 153 | # Step 1: Create the task |
| LOW | examples/cloud/01_basic_task.py | 156 | # Step 2: Wait for completion |
| LOW | examples/cloud/01_basic_task.py | 159 | # Step 3: Display results |
| LOW | browser_use/cli.py | 711 | # Step 1: Set up custom logging to RichLog |
| LOW | browser_use/cli.py | 720 | # Step 2: Set up input history |
| LOW | browser_use/cli.py | 733 | # Step 3: Focus the input field |
| LOW | browser_use/cli.py | 743 | # Step 5: Setup CDP logger and event bus listener if browser session is available |
| LOW | browser_use/cli.py | 1670 | # Step 3: Initialize Controller |
| LOW | browser_use/cli.py | 1679 | # Step 4: Get LLM |
| LOW | browser_use/cli.py | 1632 | # Step 1: Initialize BrowserSession with config |
| LOW | browser_use/tools/registry/service.py | 92 | # Step 1: Validate no **kwargs in original function signature |
| LOW | browser_use/tools/registry/service.py | 101 | # Step 2: Separate special and action parameters |
| LOW | browser_use/tools/registry/service.py | 148 | # Step 3: Create or validate param model |
| LOW | browser_use/tools/registry/service.py | 167 | # Step 4: Create normalized wrapper function |
| 53 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/ci/test_action_record.py | 8 | |
| LOW | tests/ci/test_cdp_timeout.py | 10 | |
| LOW | tests/ci/test_cli_coordinate_click.py | 7 | |
| LOW | tests/ci/test_cli_upload.py | 7 | |
| LOW | …sts/ci/security/test_download_filename_sanitization.py | 21 | |
| LOW | tests/ci/security/test_daemon_socket_perms.py | 10 | |
| LOW | tests/ci/security/test_upload_file_containment.py | 18 | |
| LOW | examples/models/langchain/chat.py | 13 | |
| LOW | browser_use/__init__.py | 48 | |
| LOW | browser_use/__init__.py | 49 | |
| LOW | browser_use/__init__.py | 52 | |
| LOW | browser_use/__init__.py | 52 | |
| LOW | browser_use/__init__.py | 52 | |
| LOW | browser_use/__init__.py | 53 | |
| LOW | browser_use/__init__.py | 53 | |
| LOW | browser_use/__init__.py | 54 | |
| LOW | browser_use/__init__.py | 55 | |
| LOW | browser_use/__init__.py | 56 | |
| LOW | browser_use/__init__.py | 57 | |
| LOW | browser_use/__init__.py | 58 | |
| LOW | browser_use/__init__.py | 59 | |
| LOW | browser_use/__init__.py | 60 | |
| LOW | browser_use/__init__.py | 61 | |
| LOW | browser_use/__init__.py | 62 | |
| LOW | browser_use/__init__.py | 63 | |
| LOW | browser_use/__init__.py | 64 | |
| LOW | browser_use/__init__.py | 65 | |
| LOW | browser_use/__init__.py | 66 | |
| LOW | browser_use/__init__.py | 67 | |
| LOW | browser_use/__init__.py | 68 | |
| LOW | browser_use/__init__.py | 69 | |
| LOW | browser_use/__init__.py | 69 | |
| LOW | browser_use/tools/extraction/__init__.py | 1 | |
| LOW | browser_use/tools/extraction/__init__.py | 2 | |
| LOW | browser_use/llm/models.py | 34 | |
| LOW | browser_use/llm/__init__.py | 10 | |
| LOW | browser_use/llm/__init__.py | 11 | |
| LOW | browser_use/llm/__init__.py | 11 | |
| LOW | browser_use/llm/__init__.py | 11 | |
| LOW | browser_use/llm/__init__.py | 11 | |
| LOW | browser_use/llm/__init__.py | 17 | |
| LOW | browser_use/llm/__init__.py | 20 | |
| LOW | browser_use/llm/__init__.py | 23 | |
| LOW | browser_use/llm/__init__.py | 29 | |
| LOW | browser_use/llm/__init__.py | 30 | |
| LOW | browser_use/llm/__init__.py | 31 | |
| LOW | browser_use/llm/__init__.py | 33 | |
| LOW | browser_use/llm/__init__.py | 34 | |
| LOW | browser_use/llm/__init__.py | 35 | |
| LOW | browser_use/llm/__init__.py | 37 | |
| LOW | browser_use/llm/__init__.py | 38 | |
| LOW | browser_use/llm/__init__.py | 39 | |
| LOW | browser_use/llm/__init__.py | 40 | |
| LOW | browser_use/llm/__init__.py | 42 | |
| LOW | browser_use/llm/__init__.py | 43 | |
| LOW | browser_use/llm/oci_raw/__init__.py | 8 | |
| LOW | browser_use/llm/vercel/__init__.py | 1 | |
| LOW | browser_use/llm/google/__init__.py | 1 | |
| LOW | browser_use/llm/deepseek/chat.py | 1 | |
| LOW | browser_use/llm/deepseek/serializer.py | 1 | |
| 103 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | tests/ci/conftest.py | 0 | { "thinking": "null", "evaluation_previous_goal": "successfully completed the task", "memory": "task completed", "next_g |
| HIGH | tests/ci/test_fallback_llm.py | 0 | { "thinking": "null", "evaluation_previous_goal": "successfully completed the task", "memory": "task completed", "next_g |
| HIGH | tests/ci/test_fallback_llm.py | 0 | { "thinking": "null", "evaluation_previous_goal": "successfully completed the task", "memory": "task completed", "next_g |
| HIGH | tests/ci/test_tools.py | 0 | create and provide a test http server that serves static content. |
| HIGH | tests/ci/interactions/test_dropdown_native.py | 0 | create and provide a test http server that serves static content. |
| HIGH | tests/ci/interactions/test_dropdown_aria_menus.py | 0 | create and provide a test http server that serves static content. |
| HIGH | tests/ci/infrastructure/test_registry_core.py | 0 | create and provide a test http server that serves static content. |
| HIGH | …astructure/test_registry_action_parameter_injection.py | 0 | create and provide a test http server that serves static content. |
| HIGH | tests/ci/test_tools.py | 0 | create and provide a browser instance with security disabled. |
| HIGH | tests/ci/interactions/test_dropdown_native.py | 0 | create and provide a browser instance with security disabled. |
| HIGH | tests/ci/interactions/test_dropdown_aria_menus.py | 0 | create and provide a browser instance with security disabled. |
| HIGH | tests/ci/browser/test_tabs.py | 0 | {{ "thinking": "i'll start by navigating to the home page", "evaluation_previous_goal": "starting task", "memory": "navi |
| HIGH | tests/ci/browser/test_tabs.py | 0 | {{ "thinking": "i'll start by navigating to the home page", "evaluation_previous_goal": "starting task", "memory": "navi |
| HIGH | tests/ci/browser/test_tabs.py | 0 | {{ "thinking": "i'll start by navigating to the home page", "evaluation_previous_goal": "starting task", "memory": "navi |
| 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 |
| 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 |
| 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 |
| 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 |
| HIGH | examples/features/multi_tab.py | 0 | simple try of the agent. @dev you need to add openai_api_key to your environment variables. |
| HIGH | examples/models/gpt-4.1.py | 0 | simple try of the agent. @dev you need to add openai_api_key to your environment variables. |
| HIGH | examples/models/gpt-5-mini.py | 0 | simple try of the agent. @dev you need to add openai_api_key to your environment variables. |
| HIGH | examples/models/openrouter.py | 0 | simple try of the agent. @dev you need to add openai_api_key to your environment variables. |
| HIGH | browser_use/llm/messages.py | 0 | automatically parse the text inside content, whether it's a string or a list of content parts. |
| HIGH | browser_use/llm/messages.py | 0 | automatically parse the text inside content, whether it's a string or a list of content parts. |
| HIGH | browser_use/llm/messages.py | 0 | automatically parse the text inside content, whether it's a string or a list of content parts. |
| HIGH | browser_use/llm/groq/serializer.py | 0 | serialize content for user messages (text and images allowed). |
| HIGH | browser_use/llm/openai/responses_serializer.py | 0 | serialize content for user messages (text and images allowed). |
| HIGH | browser_use/llm/openai/serializer.py | 0 | serialize content for user messages (text and images allowed). |
| Severity | File | Line | Snippet |
|---|---|---|---|
| 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 |
| HIGH | browser_use/llm/models.py | 90 | Factory function to create LLM instances from string names with API keys from environment. Args: model_name: St |
| HIGH | browser_use/agent/service.py | 790 | Generate a clean slug from skill title for action names Converts title to lowercase, removes special characters, repl |
| HIGH | browser_use/browser/events.py | 17 | Safely parse environment variable timeout values with robust error handling. Args: env_var: Environment variable n |
| HIGH | browser_use/browser/session.py | 1421 | Get CDP session for a target from the event-driven pool. With autoAttach=True, sessions are created automatically by |
| HIGH | browser_use/browser/session.py | 3802 | Get a CDP client attached to the target containing the specified frame. Builds a unified frame hierarchy from all tar |
| 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: |
| 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 |
| HIGH | browser_use/dom/markdown_extractor.py | 29 | Extract clean markdown from browser content using enhanced DOM tree. This unified function can extract markdown using |
| HIGH | browser_use/dom/serializer/html_serializer.py | 249 | Serialize element attributes to HTML attribute string. Args: attributes: Dictionary of attribute names to values |
| HIGH | browser_use/skills/service.py | 168 | Execute a skill with the provided parameters. Auto-initializes if not already initialized. Parameters are validated a |
| 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 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | .pre-commit-config.yaml | 59 | # best practices enforcement |
| LOW | examples/custom-functions/action_filters.py | 74 | # Note: page_filter is not directly supported anymore, so we'll just use domains |
| MEDIUM | examples/browser/playwright_integration.py | 271 | # Use Playwright's robust element selection and text extraction |
| MEDIUM | examples/cloud/04_proxy_usage.py | 285 | """Demonstrate comprehensive proxy usage.""" |
| MEDIUM | examples/cloud/05_search_api.py | 297 | """Demonstrate comprehensive Search API usage.""" |
| 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 |
| LOW | browser_use/llm/schema.py | 122 | # No $ref, just return the optimized object |
| MEDIUM | browser_use/agent/service.py | 3587 | # Level 4: ax_name (accessible name) match - robust for dynamic SPAs with menus |
| MEDIUM | browser_use/agent/service.py | 2058 | """Log a comprehensive summary of the next action(s)""" |
| LOW | browser_use/agent/views.py | 518 | # If there are no valid sensitive data entries, just return the original value |
| LOW | browser_use/agent/message_manager/service.py | 168 | # If we have fewer items than the limit, just return all items |
| LOW | browser_use/agent/message_manager/service.py | 583 | # If there are no valid sensitive data entries, just return the original value |
| LOW | browser_use/mcp/server.py | 183 | # If we can't get parent process info, just return None |
| LOW | browser_use/mcp/client.py | 518 | # Object without properties - just return dict |
| LOW | browser_use/browser/session.py | 3816 | # If cross-origin iframes are disabled, just use the main session |
| MEDIUM | browser_use/browser/watchdogs/downloads_watchdog.py | 706 | # Download using JavaScript fetch to leverage browser cache |
| MEDIUM | browser_use/browser/watchdogs/downloads_watchdog.py | 1268 | # Download using JavaScript fetch to leverage browser cache |
| MEDIUM | browser_use/browser/watchdogs/dom_watchdog.py | 435 | # Get comprehensive page info from CDP with timeout |
| MEDIUM | browser_use/browser/watchdogs/dom_watchdog.py | 749 | """Get comprehensive page information using a single CDP call. |
| MEDIUM | …owser_use/browser/watchdogs/default_action_watchdog.py | 1662 | # Set the value using JavaScript with comprehensive event dispatching |
| MEDIUM | …owser_use/browser/watchdogs/default_action_watchdog.py | 2073 | # Execute JavaScript to trigger comprehensive event sequence |
| MEDIUM | …owser_use/browser/watchdogs/default_action_watchdog.py | 3068 | # Use more robust expansion: dispatch proper DOM events that trigger event listeners |
| MEDIUM | browser_use/sandbox/sandbox.py | 305 | # 4. Pickle parameters using cloudpickle for robust serialization |
| LOW | browser_use/dom/views.py | 498 | # just pass through shadow roots |
| MEDIUM | browser_use/dom/serializer/eval_serializer.py | 12 | # NOTE: Removed 'id' and 'class' to force more robust structural selectors |
| MEDIUM | browser_use/actor/element.py | 1082 | """Focus element using multiple strategies with robust fallbacks.""" |
| MEDIUM | browser_use/actor/mouse.py | 86 | """Scroll the page using robust CDP methods.""" |
| MEDIUM | browser_use/actor/playground/playground.py | 93 | # Test element interactions with robust implementations |
| MEDIUM | browser_use/actor/playground/playground.py | 102 | # Click the link using robust click method |
| MEDIUM | browser_use/tokens/service.py | 490 | """Log a comprehensive usage summary per model with colors and nice formatting""" |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | examples/cloud/README.md | 82 | "api_key": "your_api_key" |
| HIGH | examples/apps/news-use/news_monitor.py | 48 | print(" Then run: export GEMINI_API_KEY='your-api-key-here'") |
| HIGH | examples/apps/msg-use/login.py | 22 | print("Please set it with: export GOOGLE_API_KEY='your-api-key-here'") |
| HIGH | browser_use/skills/README.md | 15 | service = SkillService(skill_ids=skill_ids, api_key='your-api-key') |
| HIGH | skills/open-source/references/integrations.md | 29 | "headers": { "x-browser-use-api-key": "your-api-key" } |
| HIGH | skills/open-source/references/integrations.md | 42 | "headers": { "x-browser-use-api-key": "your-api-key" } |
| HIGH | skills/open-source/references/integrations.md | 55 | "headers": { "x-browser-use-api-key": "your-api-key" } |
| HIGH | skills/cloud/references/browser-api.md | 24 | https://connect.browser-use.com/json/version?apiKey=YOUR_API_KEY |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | bin/lint.sh | 1 | #!/usr/bin/env bash |
| 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") |
| LOW | tests/ci/browser/test_session_start.py | 81 | |
| LOW | tests/ci/browser/test_session_start.py | 341 | # Both should complete successfully |
| LOW | tests/ci/browser/test_session_start.py | 361 | # ), |
| LOW | tests/ci/browser/test_session_start.py | 381 | # ), |
| LOW | tests/ci/browser/test_session_start.py | 401 | # assert browser_session._cdp_client_root is not None |
| LOW | tests/ci/browser/test_session_start.py | 421 | # assert browser_session._cdp_client_root is not None |
| LOW | …astructure/test_registry_action_parameter_injection.py | 301 | # # Add a highlight via JavaScript |
| LOW | …astructure/test_registry_action_parameter_injection.py | 321 | # # Call remove_highlights |
| LOW | examples/features/sensitive_data.py | 21 | # Advanced case: domain-specific credentials with reusable data |
| LOW | examples/models/cerebras_example.py | 41 | |
| LOW | examples/apps/ad-use/ad_generator.py | 221 | |
| LOW | .github/workflows/claude.yml | 41 | |
| LOW | browser_use/tools/service.py | 841 | ): |
| LOW | browser_use/agent/views.py | 641 | # browser_config: BrowserConfig | None = None, |
| LOW | browser_use/agent/message_manager/service.py | 501 | # Store state message text for history |
| LOW | browser_use/agent/message_manager/service.py | 521 | # # Extract content for logging |
| LOW | browser_use/browser/events.py | 81 | ax_node=None, |
| LOW | browser_use/browser/events.py | 341 | # class SetViewportEvent(BaseEvent): |
| LOW | browser_use/browser/events.py | 661 | |
| LOW | browser_use/browser/profile.py | 1041 | # 'name': 'Consent-O-Matic', |
| LOW | browser_use/browser/session.py | 1601 | from browser_use.browser.watchdogs.storage_state_watchdog import StorageStateWatchdog |
| LOW | browser_use/browser/session.py | 1681 | # Initialize DefaultActionWatchdog (handles all default actions like click, type, scroll, go back, go forward, refresh |
| LOW | browser_use/skill_cli/install_lite.sh | 1 | #!/usr/bin/env bash |
| LOW | browser_use/skill_cli/install.sh | 1 | #!/usr/bin/env bash |
| LOW | browser_use/skill_cli/install.sh | 21 | # |
| LOW | browser_use/skill_cli/install.sh | 41 | # - Then delete: |
| LOW | browser_use/skill_cli/install.sh | 61 | # |
| LOW | browser_use/dom/serializer/clickable_elements.py | 161 | # if node.attributes: |
| LOW | browser_use/sync/service.py | 101 | pass |
| LOW | browser_use/sync/service.py | 121 | # for line in content.splitlines(): |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | examples/features/rerun_history.py | 129 | # Display AI-generated summary (last result) |
| HIGH | examples/models/langchain/serializer.py | 137 | # as requested by the user |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/ci/test_variable_detection.py | 131 | result = _detect_from_value_pattern('John Doe') |
| LOW | tests/ci/security/test_sensitive_data.py | 249 | 'google.com': {'email': 'user@example.com', 'password': 'google_pass'}, |
| LOW | examples/features/sensitive_data.py | 23 | company_credentials: dict[str, str] = {'telephone': '9123456789', 'email': 'user@example.com', 'name': 'John Doe'} |
| LOW | examples/features/sensitive_data.py | 23 | company_credentials: dict[str, str] = {'telephone': '9123456789', 'email': 'user@example.com', 'name': 'John Doe'} |
| LOW | examples/browser/playwright_integration.py | 332 | - Phone: "555-9876" |
| LOW | examples/use-cases/apply_to_job.py | 30 | "address": "123 Main St", |
| LOW | browser_use/skill_cli/README.md | 328 | browser-use input 0 "John Doe" |
| LOW | browser_use/skill_cli/commands/cloud.py | 252 | return 'user@example.com' |
| LOW | skills/remote-browser/SKILL.md | 117 | browser-use input 5 "user@example.com" && browser-use input 6 "password" && browser-use click 7 |
| LOW | skills/cloud/references/browser-api.md | 74 | await page.fill("#email", "user@example.com") |
| LOW | skills/browser-use/SKILL.md | 163 | browser-use input 5 "user@example.com" && browser-use input 6 "password" && browser-use click 7 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | bin/setup.sh | 3 | # Usage: |
| LOW | bin/lint.sh | 3 | # Usage: |
| LOW | bin/test.sh | 3 | # Usage: |
| LOW | browser_use/skill_cli/install_lite.sh | 8 | # Usage: |
| LOW | browser_use/skill_cli/install.sh | 4 | # Usage: |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | examples/use-cases/find_influencer_profiles.py | 39 | # you can also use other apis like exa, xAI, perplexity, etc. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | browser_use/observability.py | 113 | def my_function(param1, param2): |
| LOW | browser_use/cli.py | 987 | def run_task(self, task: str) -> None: |