Commit Graph

1287 Commits

Author SHA1 Message Date
Karim shoair 9fee49c928 test: fixes to storage tests 2026-03-25 00:13:42 +02:00
Karim shoair 3757cf6d77 test: add save/retrieve round-trip and core storage coverage (#193) 2026-03-25 00:11:42 +02:00
Karim shoair 30ffe76cfa Merge branch 'dev' into test/storage-core-coverage 2026-03-24 22:42:58 +02:00
Karim shoair 3b4cae6889 Merge branch 'main' into dev 2026-03-24 22:21:07 +02:00
Karim shoair 6635a4ad72 docs: adding a new sponsor 2026-03-24 17:13:24 +02:00
Karim shoair 718db42ff0 Merge branch 'main' into dev 2026-03-23 16:40:12 +02:00
Karim shoair 32cec404f6 docs: adjustment to ad plans 2026-03-23 15:00:26 +02:00
Karim shoair e230403232 docs: removing an old sponsor 2026-03-23 14:56:35 +02:00
Karim shoair df4b1ac7e3 Merge branch 'dev' into test/storage-core-coverage 2026-03-22 18:05:42 +02:00
Karim shoair d7c08073d4 Merge branch 'main' into dev 2026-03-22 18:05:26 +02:00
Karim shoair a96809a340 docs: removing an old sponsor 2026-03-22 16:48:26 +02:00
Karim shoair bc509e9fcd Merge branch 'main' into dev 2026-03-19 17:01:25 +02:00
Karim shoair 3ed59c2a84 fix(agent): update skill zip file with the latest fix 2026-03-19 17:01:05 +02:00
Karim shoair 2e78b3f8aa fix(skill): Fix broken markdown links in skill references (#204)
Fixes #203
2026-03-19 16:58:06 +02:00
yetval a4f31ae205 simple md fix 2026-03-19 10:37:02 -04:00
Karim shoair 7ca02ebb80 test: add edge case tests for filter, iterancestors, and find_similar (#200) 2026-03-17 22:16:15 +02:00
Karim shoair bf9e2da329 Merge branch 'dev' into test/edge-cases-filter-ancestors-find-similar 2026-03-17 22:15:59 +02:00
Karim shoair 1dc0b7a1bd fix(fetchers/content): increase the default max number of retries and raise error on max retries
Ref.: https://github.com/D4Vinci/Scrapling/pull/197#issuecomment-4077705587
2026-03-17 22:14:02 +02:00
Karim shoair 17ea982162 fix(fetchers): add max retry limit to _get_page_content to prevent infinite loop (#197) 2026-03-17 22:09:05 +02:00
Karim shoair 8e4e59e13e Merge branch 'dev' into fix/page-content-infinite-loop 2026-03-17 22:08:47 +02:00
Karim shoair d9932f2308 fix(spider/fetcher): preserve HTTP method across retries in spider session (#201) 2026-03-17 22:06:01 +02:00
Karim shoair 4c07b294ae Merge branch 'dev' into fix/preserve-http-method-on-retry 2026-03-17 22:04:57 +02:00
Karim shoair 27f306259e Merge branch 'dev' into fix/page-content-infinite-loop 2026-03-17 21:55:26 +02:00
Karim shoair 136c389787 fix(Texthandler): Replace get_all with getall to match the Selector class 2026-03-17 21:53:17 +02:00
Karim shoair 980be18a2a test: add coverage for TextHandler regex paths and TextHandlers.re() (#194) 2026-03-17 21:50:05 +02:00
Karim shoair 5123590a15 Merge branch 'dev' into test/custom-types-coverage 2026-03-17 21:42:17 +02:00
Karim shoair cc6c0dbfb9 fix: adjust test to the _restore_from_checkpoint fix 2026-03-17 17:46:47 +02:00
Karim shoair 1fb7961d42 fix: replace bare raise with return False in _restore_from_checkpoint (#196) 2026-03-17 17:45:52 +02:00
Karim shoair bcd45e47bb Merge branch 'dev' into fix/checkpoint-restore-bare-raise 2026-03-17 17:36:11 +02:00
Karim shoair 5eefbc6c05 Merge branch 'dev' into test/custom-types-coverage 2026-03-17 17:34:12 +02:00
Karim shoair 6699213bdc Merge branch 'dev' into test/storage-core-coverage 2026-03-17 17:31:31 +02:00
Karim shoair 440da11259 Merge branch 'main' into dev 2026-03-17 17:28:38 +02:00
Karim shoair 7bfaf204b7 docs: CJK Latin spacing fixes for the JP README 2026-03-17 17:12:41 +02:00
Karim shoair 74abd54a0b docs: Add translations to the new sponsor 2026-03-17 17:00:32 +02:00
Karim shoair 3d60792cbc docs: update Zensical 2026-03-17 16:53:55 +02:00
Karim shoair 3b543a6bdd docs: add a new sponsor 2026-03-17 16:45:04 +02:00
karesansui 5bf921b308 fix: preserve HTTP method across retries in spider session
SessionManager.fetch() pops `method` from `_session_kwargs`,
which mutates the original request dict. When the engine retries
a blocked request via request.copy(), the copy no longer has
`method`, so it defaults to GET.

Steps to reproduce:
1. Yield Request(url, method="POST", data=...)
2. Target returns a response that triggers is_blocked()
3. Engine retries via request.copy() → second fetch uses GET

Fix: copy the kwargs dict before popping, so the original
request stays intact.
2026-03-17 00:53:52 +09:00
Karim shoair 012e9f9f5e docs: images adjustments 2026-03-16 16:23:08 +02:00
Karim shoair f25bca75bf docs: fixing broken links
Also, Fixes #199
2026-03-16 15:38:23 +02:00
Karim shoair ca6c1f3c1e docs: CJK Latin spacing fixes for the Chinese README 2026-03-16 15:26:25 +02:00
awanawona cec5acd68a test: add edge case tests for filter, iterancestors, and find_similar
- test_selectors_filter.py: covers chained filter(), empty result,
  all-pass predicate, and calling filter() on empty Selectors
- test_ancestor_navigation.py: covers iterancestors() order, depth,
  text-node safety, root-element edge case, and find_ancestor() with
  no match
- test_find_similar_advanced.py: covers similarity_threshold levels,
  match_text=True behavior, ignore_attributes combinations, and
  text-node safety
2026-03-16 18:01:11 +08:00
Karim shoair 72a2c8de81 Merge branch 'main' into dev 2026-03-15 22:44:16 +02:00
Karim shoair eb32285c49 docs: add the sponsor translated versions 2026-03-15 22:25:50 +02:00
Karim shoair f286575f31 docs: adding a new sponsor 2026-03-15 22:17:12 +02:00
Karim shoair 1e7704864e Merge branch 'dev' into test/custom-types-coverage 2026-03-15 16:38:48 +02:00
Karim shoair e63e57e6dc test(ai): add _normalize_credentials edge case coverage (#192) 2026-03-15 16:25:57 +02:00
Karim shoair 656dbc7d12 Merge branch 'dev' into test/normalize-credentials-coverage 2026-03-15 16:24:59 +02:00
haosenwang1018 d3c251c1ab fix: add max retry limit to _get_page_content to prevent infinite loop
Both _get_page_content and _get_async_page_content use a while-True
loop that retries page.content() on PlaywrightError with no upper
bound. If the page is in a permanently broken state (crashed tab,
closed context), this loops forever and hangs the process.

Replace with a bounded for-loop (default 10 retries = 5s), returning
an empty string if all attempts fail. This preserves the existing
retry behavior for the transient Windows issue (playwright#16108)
while preventing hangs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:53:23 +08:00
haosenwang1018 a31763afde fix: replace bare raise with return False in _restore_from_checkpoint
When _checkpoint_system_enabled is False, the method uses a bare
`raise` with no active exception, which causes RuntimeError at
runtime. The method's docstring says it returns False when restoration
is not possible, so return False is the correct behavior.

The caller in crawl() currently guards with `if
self._checkpoint_system_enabled`, but the method's own contract
should be self-consistent.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:52:57 +08:00
haosenwang1018 7178279586 test: add coverage for TextHandler regex, clean, and TextHandlers.re()
Several critical code paths in custom_types.py lacked test coverage:

- TextHandler.re(check_match=True): returns bool, not TextHandlers
- TextHandler.re(replace_entities=False): entity preservation path
- TextHandler.re() with capture groups: flatten behavior
- TextHandler.re_first() default value when no match
- TextHandler.clean(remove_entities=True): entity replacement path
- TextHandler.json() valid and invalid input
- TextHandlers.re(): list-level regex with result flattening
- TextHandlers.extract()/get_all(): identity return

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:27:55 +08:00