Repository Analysis

autoscrape-labs/pydoll

Pydoll is a library for automating chromium-based browsers without a WebDriver, offering realistic interactions.

17.8 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of autoscrape-labs/pydoll, a HTML project with 7,053 GitHub stars. SynthScan v2.0 examined 90,437 lines of code across 478 source files, recording 1159 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 17.8 places this repository in the Moderate 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).

17.8
Adjusted Score
17.8
Raw Score
100%
Time Factor
2026-08-26
Last Push
7.1K
Stars
HTML
Language
90.4K
Lines of Code
478
Files
1.2K
Pattern Hits
2026-08-29
Scan Date
0.14
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

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.

CRITICAL 0HIGH 69MEDIUM 32LOW 1058

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 1159 distinct pattern matches across 17 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.

Hyper-Verbose Identifiers786 hits · 877 pts
SeverityFileLineSnippetContext
LOWtests/unit/test_har_recorder.py33async def test_stop_awaits_in_flight_body_tasks_and_cleans_up():CODE
LOWtests/unit/test_har_recorder.py56async def test_stop_flushes_in_flight_request_as_pending_entry():CODE
LOWtests/unit/test_har_recorder.py94async def test_fetch_response_body_retries_until_body_available():CODE
LOWtests/unit/test_har_recorder.py107async def test_fetch_response_body_no_retry_when_body_not_expected():CODE
LOWtests/unit/test_har_recorder.py119async def test_fetch_response_body_gives_up_after_max_attempts():CODE
LOWtests/unit/test_emulation_commands.py13def test_get_screen_infos_shape():CODE
LOWtests/unit/test_emulation_commands.py41def test_update_screen_omits_unset_params():CODE
LOWtests/unit/test_emulation_commands.py46def test_update_screen_requires_only_screen_id():CODE
LOWtests/unit/test_utils.py24def test_normalize_synthetic_xpath_extracts_inner_xpath():CODE
LOWtests/unit/test_utils.py28def test_normalize_synthetic_xpath_passes_through_plain_selector():CODE
LOWtests/unit/test_utils.py32def test_normalize_synthetic_xpath_returns_input_when_unparseable():CODE
LOWtests/unit/test_utils.py43 def test_decode_image_to_bytes(self):CODE
LOWtests/unit/test_utils.py52 def test_decode_image_to_bytes_empty_string(self):CODE
LOWtests/unit/test_utils.py59 def test_decode_image_to_bytes_complex_data(self):CODE
LOWtests/unit/test_utils.py210 def test_validate_browser_paths_file_exists_but_not_executable(self):CODE
LOWtests/unit/test_utils.py226 def test_validate_browser_paths_directory_instead_of_file(self):CODE
LOWtests/unit/test_utils.py236 def test_validate_browser_paths_empty_list(self):CODE
LOWtests/unit/test_utils.py245 def test_validate_browser_paths_mixed_valid_invalid(self):CODE
LOWtests/unit/test_utils.py287 def test_validate_browser_paths_valid_path(self, tmp_path):CODE
LOWtests/unit/test_utils.py297 def test_validate_browser_paths_invalid_paths(self):CODE
LOWtests/unit/test_utils.py105 async def test_missing_websocket_url(self):CODE
LOWtests/unit/test_utils.py155 def test_validate_browser_paths_success(self):CODE
LOWtests/unit/test_utils.py173 def test_validate_browser_paths_first_valid_wins(self):CODE
LOWtests/unit/test_utils.py192 def test_validate_browser_paths_no_valid_paths(self):CODE
LOWtests/unit/test_utils.py308 def test_clean_script_for_analysis_removes_comments(self):CODE
LOWtests/unit/test_utils.py340 def test_is_script_already_function_regular_function(self):STRING
LOWtests/unit/test_utils.py345 def test_is_script_already_function_arrow_function(self):STRING
LOWtests/unit/test_utils.py350 def test_is_script_already_function_with_parameters(self):STRING
LOWtests/unit/test_utils.py355 def test_is_script_already_function_not_function(self):STRING
LOWtests/unit/test_utils.py360 def test_is_script_already_function_with_whitespace(self):STRING
LOWtests/unit/test_utils.py365 def test_has_return_outside_function_simple_return(self):STRING
LOWtests/unit/test_utils.py370 def test_has_return_outside_function_no_return(self):STRING
LOWtests/unit/test_utils.py375 def test_has_return_outside_function_return_inside_function(self):STRING
LOWtests/unit/test_utils.py385 def test_has_return_outside_function_mixed_returns(self):STRING
LOWtests/unit/test_utils.py395 def test_has_return_outside_function_already_function(self):STRING
LOWtests/unit/test_utils.py400 def test_has_return_outside_function_with_comments(self):STRING
LOWtests/unit/test_utils.py410 def test_has_return_outside_function_nested_braces(self):STRING
LOWtests/unit/test_utils.py424 def test_has_return_outside_function_arrow_function(self):STRING
LOWtests/unit/test_utils.py434 def test_extract_text_without_strip_without_separator(self):STRING
LOWtests/unit/test_utils.py440 def test_extract_text_with_strip_without_separator(self):STRING
LOWtests/unit/test_utils.py446 def test_extract_text_without_strip_with_separator(self):STRING
LOWtests/unit/test_utils.py452 def test_extract_text_with_strip_with_separator(self):STRING
LOWtests/unit/test_utils.py324 def test_clean_script_for_analysis_removes_strings(self):STRING
LOWtests/unit/test_keyboard_humanized.py67async def test_humanized_typing_without_typos_reproduces_text(field, monkeypatch):CODE
LOWtests/unit/test_keyboard_humanized.py88async def test_each_typo_type_self_corrects_to_intended_text(CODE
LOWtests/unit/test_keyboard_humanized.py96async def test_adjacent_typo_on_non_qwerty_char_still_yields_char(field, force_typos):CODE
LOWtests/unit/test_keyboard_humanized.py102async def test_transpose_typo_without_alpha_neighbor_still_yields_text(field, force_typos):CODE
LOWtests/unit/test_interactions.py32async def test_mouse_click_presses_and_releases_at_target(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py40async def test_mouse_move_positions_cursor_at_target(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py46async def test_mouse_down_presses_and_up_releases(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py54async def test_double_click_uses_click_count_two(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py60async def test_drag_presses_at_start_and_releases_at_end(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py68async def test_keyboard_down_then_up_for_a_key(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py76async def test_keyboard_press_presses_and_releases_the_key(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py83async def test_keyboard_type_text_types_each_character_in_order(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py98async def test_hotkey_applies_combined_modifier_to_key(fake_conn, fake_tab, keys, expected_modifier):CODE
LOWtests/unit/test_interactions.py109async def test_hotkey_without_modifier_keys_sends_no_modifier(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py116async def test_scroll_by_issues_scroll_with_distance(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py124async def test_scroll_to_top_issues_a_scroll(fake_conn, fake_tab):CODE
LOWtests/unit/test_interactions.py130async def test_scroll_to_bottom_issues_a_scroll(fake_conn, fake_tab):CODE
726 more matches not shown…
Cross-Language Confusion33 hits · 190 pts
SeverityFileLineSnippetContext
HIGHtests/integration/test_iframe_integration.py1136 Its ``contentDocument.frameId`` is null, so resolution goes through theSTRING
HIGHpydoll/constants.py31 rect.width > 0 && rect.height > 0CODE
HIGHpydoll/constants.py47 return elementFromPoint === this || this.contains(elementFromPoint);CODE
HIGHpydoll/constants.py90 var select = this && this.parentElement ? this.parentElement.closest('select') : null;CODE
HIGHpydoll/constants.py90 var select = this && this.parentElement ? this.parentElement.closest('select') : null;CODE
HIGHpydoll/constants.py112 "{escaped_value}", this, null,CODE
HIGHpydoll/constants.py120 "{escaped_value}", document, null,CODE
HIGHpydoll/constants.py129 "{escaped_value}", this, null,CODE
HIGHpydoll/constants.py134 results.push(elements.snapshotItem(i));CODE
HIGHpydoll/constants.py142 "{escaped_value}", document, null,CODE
HIGHpydoll/constants.py147 results.push(elements.snapshotItem(i));CODE
HIGHpydoll/constants.py173 null,CODE
HIGHpydoll/constants.py209 allDescendants.push(CODE
HIGHpydoll/constants.py276 jsonData = null;CODE
HIGHpydoll/constants.py280 jsonData = null;CODE
HIGHpydoll/constants.py295 error: error.toString(),CODE
HIGHpydoll/constants.py388 GET_SCROLL_Y = 'window.scrollY || window.pageYOffset || 0'STRING
HIGHpydoll/constants.py397 const scrollTop = window.scrollY || window.pageYOffset || 0;CODE
HIGHpydoll/constants.py426 if (!hasSelection && text === '') {CODE
HIGHpydoll/constants.py512 return !!(this && this.tagName && this.tagName.toLowerCase() === 'option');CODE
HIGHpydoll/utils/fingerprint_builder.py14 - ``Object.getOwnPropertyDescriptor(proto, prop).get.toString()`` mustSTRING
HIGHpydoll/utils/fingerprint_builder.py99 const _og = _od && _od.get;CODE
HIGHpydoll/utils/fingerprint_builder.py346 if (paramOverrides[pname] !== undefined) return paramOverrides[pname];CODE
HIGHpydoll/utils/fingerprint_builder.py363 if (extOverrides !== null) {CODE
HIGHpydoll/utils/fingerprint_builder.py366 if (!extOverrides.includes(name)) return null;CODE
HIGHpydoll/utils/fingerprint_builder.py507for (let i = 0; i < {audio_in}; i++) devices.push(makeDev('audioinput'));CODE
HIGHpydoll/utils/fingerprint_builder.py508for (let i = 0; i < {audio_out}; i++) devices.push(makeDev('audiooutput'));CODE
HIGHpydoll/utils/fingerprint_builder.py509for (let i = 0; i < {video_in}; i++) devices.push(makeDev('videoinput'));CODE
HIGHpydoll/utils/fingerprint_builder.py671 ' const name = desc && desc.name;\n'CODE
HIGHpydoll/utils/fingerprint_builder.py672 ' if (name && overrides[name] !== undefined) {\n'CODE
HIGHpydoll/utils/fingerprint_builder.py672 ' if (name && overrides[name] !== undefined) {\n'CODE
HIGHpydoll/utils/fingerprint_builder.py676 ' onchange: null,\n'CODE
HIGHpydoll/protocol/fingerprint/types.py307 do_not_track: NotRequired[str] # navigator.doNotTrack (null, "1")CODE
Docstring Block Structure30 hits · 150 pts
SeverityFileLineSnippetContext
HIGHpydoll/connection/connection_handler.py96 Send CDP command and await response. Args: command: CDP command to send. timeoSTRING
HIGHpydoll/utils/general.py159 Validates potential browser executable paths and returns the first valid one. Checks a list of possible browseSTRING
HIGHpydoll/extractor/field.py64Define extraction metadata for a model field. Wraps pydantic.Field() and registers ExtractionMetadata for the enginSTRING
HIGHpydoll/extractor/model.py62Read ExtractionMetadata from pydantic FieldInfo objects via registry. For each field, checks if json_schema_extra cSTRING
HIGHpydoll/extractor/engine.py42Extract a single model instance from the page. Args: model: ExtractionModel subclass to populate. STRING
HIGHpydoll/extractor/engine.py294Build model instance from extracted values. Pydantic handles validation, type coercion, and defaults. Args: STRING
HIGHpydoll/browser/tab.py288Extract structured data from the page into a typed model. Args: model: ExtractionModel subclass defSTRING
HIGHpydoll/browser/tab.py550 .. deprecated:: ?.?.? Use iframe `WebElement` instances directly; this method will be removed in STRING
HIGHpydoll/browser/tab.py603 Find all shadow roots in the page. Traverses the entire DOM tree (including iframes and nested shadow STRING
HIGHpydoll/browser/tab.py901 Get the response body for a given request ID. Args: request_id: Request ID to get the respSTRING
HIGHpydoll/browser/tab.py923 Get network logs. Args: filter: Filter to apply to the network logs. Returns: STRING
HIGHpydoll/browser/tab.py1047 Capture screenshot of current page. Args: path: File path for screenshot (extension determSTRING
HIGHpydoll/browser/tab.py1127 Generate PDF of current page. Args: path: File path for PDF output. Required if as_base64=STRING
HIGHpydoll/browser/tab.py1387 Execute JavaScript in page context. Args: script (str): JavaScript code to execute. STRING
HIGHpydoll/browser/requests/request.py108Execute an HTTP request in the browser's JavaScript context. This method uses the browser's fetch API to make rSTRING
HIGHpydoll/browser/chromium/base.py177 Start browser process and establish CDP connection. Args: headless: Deprecated. Use `optioSTRING
HIGHpydoll/elements/web_element.py288 Get the shadow root attached to this element. Args: timeout: Maximum seconds to wait for tSTRING
HIGHpydoll/elements/web_element.py354 Retrieve all direct and nested child elements of this element. Args: max_depth (int, optioSTRING
HIGHpydoll/elements/web_element.py385 Retrieve all sibling elements of this element (elements at the same DOM level). Args: tag_STRING
HIGHpydoll/elements/web_element.py415 Capture screenshot of this element only. Automatically scrolls element into view before capturing. STRING
HIGHpydoll/elements/web_element.py873 Execute JavaScript in element context. Args: script (str): JavaScript code to execute. UseSTRING
HIGHpydoll/elements/mixins/find_elements_mixin.py152 Find element(s) using combination of common HTML attributes. Flexible element location using standard STRING
HIGHpydoll/elements/mixins/find_elements_mixin.py257 Find element(s) using raw CSS selector or XPath expression. Direct access using CSS or XPath syntax. SSTRING
HIGHpydoll/elements/mixins/find_elements_mixin.py300 Core element finding method with optional waiting capability. Searches for elements with flexible waitSTRING
HIGHpydoll/elements/mixins/find_elements_mixin.py370 Retry loop for iframe-crossing element searches. Repeatedly calls :meth:`_attempt_find_across_iframes`STRING
HIGHpydoll/elements/mixins/find_elements_mixin.py450 Find first element matching selector. Internal method performing actual element search. Can be called STRING
HIGHpydoll/elements/mixins/find_elements_mixin.py513 Find all elements matching selector. Internal method performing actual multi-element search. Can be caSTRING
HIGHpydoll/commands/network_commands.py140 Deletes browser cookies with matching criteria. Provides granular control over cookie removal through STRING
HIGHpydoll/commands/network_commands.py224 Retrieves cookies matching specified URLs. Args: urls: list of URLs to scope cookie retrieSTRING
HIGHpydoll/commands/network_commands.py430 Applies custom HTTP headers to all subsequent requests. Enables advanced scenarios: - A/B testSTRING
Unused Imports158 hits · 150 pts
SeverityFileLineSnippetContext
LOWtests/unit/test_har_recorder.py9CODE
LOWtests/unit/test_emulation_commands.py7CODE
LOWtests/unit/test_utils.py7CODE
LOWtests/unit/conftest.py11CODE
LOWtests/unit/test_keyboard_humanized.py14CODE
LOWtests/unit/test_interactions.py8CODE
LOWtests/unit/test_shadow_root.py9CODE
LOWtests/unit/test_decorators.py5CODE
LOWtests/unit/test_decorators.py6CODE
LOWtests/unit/test_extractor_helpers.py3CODE
LOWtests/unit/test_temp_dir_manager.py8CODE
LOWtests/unit/test_interactions_utils.py3CODE
LOWtests/unit/test_har_cookie_parsing.py11CODE
LOWtests/unit/test_web_element.py10CODE
LOWtests/unit/test_browser_wiring.py8CODE
LOWtests/unit/test_browser_commands.py9CODE
LOWtests/unit/test_selector_parser.py3CODE
LOWtests/unit/test_user_agent_parser.py8CODE
LOWtests/unit/test_fingerprint_applier.py8CODE
LOWtests/unit/test_proxy_manager.py7CODE
LOWtests/unit/test_commands_manager.py3CODE
LOWtests/unit/test_bundle.py10CODE
LOWtests/unit/test_fingerprint_builder.py9CODE
LOWtests/unit/test_events_manager.py3CODE
LOWtests/unit/test_mouse_humanized.py12CODE
LOWtests/unit/test_tab_commands.py10CODE
LOWtests/unit/test_request_cookie_extraction.py11CODE
LOWtests/unit/test_scroll_humanized.py15CODE
LOWtests/unit/test_find_elements_mixin.py9CODE
LOWtests/integration/conftest.py3CODE
LOWtests/integration/test_web_element_integration.py10CODE
LOWtests/integration/test_web_element_integration.py19CODE
LOWtests/integration/test_tab_io_integration.py12CODE
LOWtests/integration/test_tab_io_integration.py20CODE
LOWtests/integration/test_extractor_integration.py3CODE
LOWtests/integration/test_interactions_integration.py9CODE
LOWtests/integration/test_tab_request_integration.py9CODE
LOWtests/integration/test_tab_features_integration.py11CODE
LOWtests/integration/test_tab.py10CODE
LOWtests/integration/test_browser_integration.py10CODE
LOWtests/integration/test_socks5_forwarder.py13CODE
LOWtests/integration/test_connection_handler.py9CODE
LOWtests/integration/_waits.py10CODE
LOWpydoll/interactions/scroll.py1CODE
LOWpydoll/interactions/__init__.py1CODE
LOWpydoll/interactions/__init__.py1CODE
LOWpydoll/interactions/__init__.py2CODE
LOWpydoll/interactions/__init__.py2CODE
LOWpydoll/interactions/__init__.py3CODE
LOWpydoll/interactions/__init__.py3CODE
LOWpydoll/interactions/__init__.py3CODE
LOWpydoll/interactions/__init__.py3CODE
LOWpydoll/interactions/__init__.py3CODE
LOWpydoll/interactions/__init__.py10CODE
LOWpydoll/interactions/__init__.py10CODE
LOWpydoll/interactions/__init__.py10CODE
LOWpydoll/interactions/__init__.py11CODE
LOWpydoll/interactions/__init__.py11CODE
LOWpydoll/interactions/__init__.py11CODE
LOWpydoll/interactions/iframe.py1CODE
98 more matches not shown…
Decorative Section Separators20 hits · 75 pts
SeverityFileLineSnippetContext
MEDIUMtests/integration/test_extractor_integration.py208# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/integration/test_extractor_integration.py210# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/integration/test_extractor_integration.py22# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/integration/test_extractor_integration.py24# ---------------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py21# ---------------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py23# ---------------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py160 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py162 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py198 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py200 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py235 # ==================================================================COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py237 # ==================================================================COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py49 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py51 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py66 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py68 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py113 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py115 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py126 # ------------------------------------------------------------------COMMENT
MEDIUMpydoll/elements/utils/selector_parser.py128 # ------------------------------------------------------------------COMMENT
Modern Structural Boilerplate42 hits · 42 pts
SeverityFileLineSnippetContext
LOWtests/unit/conftest.py39 def set_response(self, method: str, result: dict) -> None:CODE
LOWtests/integration/conftest.py75 def set_result(self, method: str, result: dict) -> None:CODE
LOWpydoll/decorators.py7logger = logging.getLogger(__name__)CODE
LOWpydoll/interactions/__init__.py13__all__ = [CODE
LOWpydoll/interactions/iframe.py20logger = logging.getLogger(__name__)CODE
LOWpydoll/interactions/mouse.py22logger = logging.getLogger(__name__)CODE
LOWpydoll/interactions/keyboard.py20logger = logging.getLogger(__name__)CODE
LOWpydoll/connection/connection_handler.py28logger = logging.getLogger(__name__)CODE
LOWpydoll/connection/__init__.py3__all__ = [CODE
LOWpydoll/connection/managers/events_manager.py20logger = logging.getLogger(__name__)CODE
LOWpydoll/connection/managers/__init__.py4__all__ = [CODE
LOWpydoll/connection/managers/commands_manager.py10logger = logging.getLogger(__name__)CODE
LOWpydoll/utils/socks5_proxy_forwarder.py66logger = logging.getLogger(__name__)CODE
LOWpydoll/utils/__init__.py15__all__ = [CODE
LOWpydoll/utils/general.py13logger = logging.getLogger(__name__)CODE
LOWpydoll/extractor/__init__.py9__all__ = [CODE
LOWpydoll/extractor/engine.py20logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/fingerprint_applier.py42logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/__init__.py4__all__ = ['Chrome', 'Edge']CODE
LOWpydoll/browser/tab.py131logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/managers/browser_process_manager.py5logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/managers/proxy_manager.py9logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/managers/proxy_manager.py105 def _update_proxy_argument(self, index: int, clean_proxy: str) -> None:CODE
LOWpydoll/browser/managers/__init__.py10__all__ = [CODE
LOWpydoll/browser/managers/browser_options_manager.py13logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/managers/temp_dir_manager.py9logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/requests/request.py31logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/requests/__init__.py10__all__ = ['HarCapture', 'Request', 'Response']CODE
LOWpydoll/browser/requests/response.py13logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/requests/har_recorder.py53logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/chromium/edge.py15logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/chromium/__init__.py4__all__ = [CODE
LOWpydoll/browser/chromium/chrome.py15logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/chromium/base.py77logger = logging.getLogger(__name__)CODE
LOWpydoll/browser/chromium/base.py832 async def _setup_worker_user_agent_override(self) -> None:CODE
LOWpydoll/elements/shadow_root.py15logger = logging.getLogger(__name__)CODE
LOWpydoll/elements/web_element.py73logger = logging.getLogger(__name__)CODE
LOWpydoll/elements/mixins/__init__.py3__all__ = [CODE
LOWpydoll/elements/mixins/find_elements_mixin.py33logger = logging.getLogger(__name__)CODE
LOWpydoll/elements/utils/__init__.py3__all__ = ['SelectorParser']CODE
LOWpydoll/elements/utils/selector_parser.py19logger = logging.getLogger(__name__)CODE
LOWpydoll/commands/__init__.py14__all__ = [CODE
Excessive Try-Catch Wrapping33 hits · 38 pts
SeverityFileLineSnippetContext
LOWdocs/pt/deep-dive/network/build-proxy.md71 except Exception as e:CODE
LOWdocs/pt/deep-dive/network/build-proxy.md100 except Exception:CODE
LOWdocs/pt/deep-dive/network/build-proxy.md265 except Exception as e:CODE
MEDIUMdocs/pt/deep-dive/network/build-proxy.md41def _handle_client(self, reader, writer):CODE
MEDIUMdocs/pt/deep-dive/network/build-proxy.md256def _handle_client(self, reader, writer):CODE
LOWdocs/zh/deep-dive/network/build-proxy.md71 except Exception as e:CODE
LOWdocs/zh/deep-dive/network/build-proxy.md100 except Exception:CODE
LOWdocs/zh/deep-dive/network/build-proxy.md265 except Exception as e:CODE
MEDIUMdocs/zh/deep-dive/network/build-proxy.md41def _handle_client(self, reader, writer):CODE
MEDIUMdocs/zh/deep-dive/network/build-proxy.md256def _handle_client(self, reader, writer):CODE
LOWdocs/en/deep-dive/network/build-proxy.md71 except Exception as e:CODE
LOWdocs/en/deep-dive/network/build-proxy.md100 except Exception:CODE
LOWdocs/en/deep-dive/network/build-proxy.md265 except Exception as e:CODE
MEDIUMdocs/en/deep-dive/network/build-proxy.md41def _handle_client(self, reader, writer):CODE
MEDIUMdocs/en/deep-dive/network/build-proxy.md256def _handle_client(self, reader, writer):CODE
LOWpydoll/decorators.py47 except Exception as e_inner:CODE
LOWpydoll/decorators.py50 except Exception as e:CODE
LOWpydoll/decorators.py118 except Exception as exc:CODE
LOWpydoll/interactions/iframe.py294 except Exception:CODE
LOWpydoll/connection/connection_handler.py271 except Exception:CODE
LOWpydoll/connection/connection_handler.py275 except Exception:CODE
LOWpydoll/connection/managers/events_manager.py92 except Exception:CODE
LOWpydoll/connection/managers/events_manager.py182 except Exception as e:CODE
LOWpydoll/utils/socks5_proxy_forwarder.py279 except Exception:CODE
LOWpydoll/extractor/engine.py310 except Exception as exc:CODE
LOWpydoll/browser/tab.py1239 except Exception:CODE
LOWpydoll/browser/tab.py2058 except Exception as exc:CODE
LOWpydoll/browser/managers/temp_dir_manager.py144 except Exception: # noqa: BLE001 - best-effort cleanupCODE
LOWpydoll/browser/requests/request.py151 except Exception as exc:CODE
LOWpydoll/browser/requests/har_recorder.py65 except Exception:CODE
LOWpydoll/browser/requests/har_recorder.py331 except Exception:CODE
LOWpydoll/browser/requests/har_recorder.py433 except Exception:CODE
LOWpydoll/browser/chromium/base.py890 except Exception:CODE
Cross-File Repetition6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHdocs/pt/deep-dive/fingerprinting/auditing.md0document.head.insertadjacenthtml('beforeend', '<style>.probe{--g: srgb} @media (color-gamut: p3){.probe{--g: p3}}</styleSTRING
HIGHdocs/zh/deep-dive/fingerprinting/auditing.md0document.head.insertadjacenthtml('beforeend', '<style>.probe{--g: srgb} @media (color-gamut: p3){.probe{--g: p3}}</styleSTRING
HIGHdocs/en/deep-dive/fingerprinting/auditing.md0document.head.insertadjacenthtml('beforeend', '<style>.probe{--g: srgb} @media (color-gamut: p3){.probe{--g: p3}}</styleSTRING
HIGHdocs/pt/stealth/evasion-techniques.md0return { useragent: navigator.useragent, webdriver: navigator.webdriver, languages: navigator.languages, plugins: navigaSTRING
HIGHdocs/zh/stealth/evasion-techniques.md0return { useragent: navigator.useragent, webdriver: navigator.webdriver, languages: navigator.languages, plugins: navigaSTRING
HIGHdocs/en/stealth/evasion-techniques.md0return { useragent: navigator.useragent, webdriver: navigator.webdriver, languages: navigator.languages, plugins: navigaSTRING
AI Structural Patterns21 hits · 19 pts
SeverityFileLineSnippetContext
LOWpydoll/browser/tab.py1324CODE
LOWpydoll/browser/tab.py1346CODE
LOWpydoll/browser/tab.py1364CODE
LOWpydoll/browser/tab.py1884CODE
LOWpydoll/elements/web_element.py857CODE
LOWpydoll/elements/mixins/find_elements_mixin.py71CODE
LOWpydoll/elements/mixins/find_elements_mixin.py85CODE
LOWpydoll/elements/mixins/find_elements_mixin.py99CODE
LOWpydoll/elements/mixins/find_elements_mixin.py113CODE
LOWpydoll/elements/mixins/find_elements_mixin.py127CODE
LOWpydoll/elements/mixins/find_elements_mixin.py140CODE
LOWpydoll/commands/target_commands.py152CODE
LOWpydoll/commands/network_commands.py322CODE
LOWpydoll/commands/runtime_commands.py111CODE
LOWpydoll/commands/runtime_commands.py241CODE
LOWpydoll/commands/page_commands.py385CODE
LOWpydoll/commands/input_commands.py82CODE
LOWpydoll/commands/input_commands.py171CODE
LOWpydoll/commands/input_commands.py524CODE
LOWpydoll/commands/emulation_commands.py144CODE
LOWpydoll/commands/emulation_commands.py285CODE
Self-Referential Comments4 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMtests/unit/test_utils.py216 # Create a file that exists but is not executableCOMMENT
MEDIUMtests/unit/test_utils.py289 # Create a temporary executable fileCOMMENT
MEDIUMtests/unit/test_utils.py161 # Create a temporary executable fileCOMMENT
MEDIUMtests/integration/test_iframe_integration.py553 # Create a test page with multiple iframesCOMMENT
Deep Nesting11 hits · 10 pts
SeverityFileLineSnippetContext
LOWtests/integration/test_tab_io_integration.py54CODE
LOWtests/integration/test_tab_io_integration.py63CODE
LOWtests/integration/test_har_recording_integration.py61CODE
LOWtests/integration/test_tab_request_integration.py49CODE
LOWpydoll/connection/managers/events_manager.py171CODE
LOWpydoll/browser/fingerprint_applier.py357CODE
LOWpydoll/browser/fingerprint_applier.py390CODE
LOWpydoll/browser/tab.py1172CODE
LOWpydoll/browser/managers/temp_dir_manager.py127CODE
LOWpydoll/browser/requests/request.py508CODE
LOWpydoll/browser/requests/har_recorder.py585CODE
Fake / Example Data9 hits · 8 pts
SeverityFileLineSnippetContext
LOWREADME_zh.md235await (await tab.find(id='username')).type_text('user@example.com')CODE
LOWtests/integration/test_iframe_integration.py470 placeholder = input_elem.get_attribute('placeholder')CODE
LOWtests/integration/test_extractor_integration.py265 assert article.author.name == 'Jane Doe'CODE
LOWtests/integration/test_extractor_integration.py331 assert data['author']['name'] == 'Jane Doe'CODE
LOWtests/integration/test_extractor_integration.py553 assert article.author_name == 'Jane Doe'CODE
LOWtests/integration/test_core_integration.py182 test_text = 'user@example.com'CODE
LOWtests/integration/pages/web_element.html78 <input id="email-input" type="email" value="user@example.com">CODE
LOWpydoll/protocol/dom/types.py47 PLACEHOLDER = 'placeholder'CODE
LOWpydoll/protocol/accessibility/types.py38 PLACEHOLDER = 'placeholder'CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWpydoll/interactions/scroll.py154 # Check if we are stuckCOMMENT
LOWpydoll/utils/general.py250 # Check if return is inside a function by counting bracesCOMMENT
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUM.github/ISSUE_TEMPLATE/feature_request.yml29 placeholder: I'm trying to accomplish X, but I'm unable to because Y...CODE
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpydoll/utils/fingerprint_builder.py61COMMENT
AI Slop Vocabulary1 hit · 1 pts
SeverityFileLineSnippetContext
MEDIUMpydoll/elements/web_element.py837 """Check if element is visible using comprehensive JavaScript visibility test."""STRING
Overly Generic Function Names1 hit · 0 pts
SeverityFileLineSnippetContext
LOWpydoll/decorators.py96 def my_function():STRING