From 9e22f68c6fa98d7f14d4b16d5d7e8bf860a2f52d Mon Sep 17 00:00:00 2001 From: Rustem Kamalov Date: Tue, 14 Apr 2026 00:41:35 +0300 Subject: [PATCH] Add sanitized real html pages (google,yandex,baidu) for tests. Raw search HTML parser tests. --- baidu/all_test.go | 48 +++-------- baidu/search_raw.go | 33 +++++--- baidu/search_raw_test.go | 76 ++++++++++++++++++ baidu/testdata/search_captcha.html | 1 + baidu/testdata/search_no_results.html | 2 + baidu/testdata/search_results.html | 3 + bing/bing_test.go | 92 +-------------------- core/browser_test.go | 28 +++---- core/captcha_test.go | 14 +++- duckduckgo/search_test.go | 106 ++++++++++++------------- google/search.go | 17 +++- google/search_raw_test.go | 76 ++++++++++++++++++ google/search_test.go | 9 +++ google/testdata/search_captcha.html | 1 + google/testdata/search_no_results.html | 1 + google/testdata/search_results.html | 1 + testutil/fixtures.go | 70 ++++++++++++++++ yandex/search_raw.go | 30 +++++-- yandex/search_raw_test.go | 76 ++++++++++++++++++ yandex/search_test.go | 38 ++++----- yandex/testdata/search_captcha.html | 1 + yandex/testdata/search_no_results.html | 1 + yandex/testdata/search_results.html | 1 + 23 files changed, 490 insertions(+), 235 deletions(-) create mode 100644 baidu/search_raw_test.go create mode 100644 baidu/testdata/search_captcha.html create mode 100644 baidu/testdata/search_no_results.html create mode 100644 baidu/testdata/search_results.html create mode 100644 google/search_raw_test.go create mode 100644 google/testdata/search_captcha.html create mode 100644 google/testdata/search_no_results.html create mode 100644 google/testdata/search_results.html create mode 100644 testutil/fixtures.go create mode 100644 yandex/search_raw_test.go create mode 100644 yandex/testdata/search_captcha.html create mode 100644 yandex/testdata/search_no_results.html create mode 100644 yandex/testdata/search_results.html diff --git a/baidu/all_test.go b/baidu/all_test.go index 54f760d..a5ec46b 100644 --- a/baidu/all_test.go +++ b/baidu/all_test.go @@ -1,22 +1,14 @@ package baidu import ( + "net/url" "testing" - "time" "github.com/karust/openserp/core" ) -var browser *core.Browser var testQuery = core.Query{Text: "go", Site: "tutorialspoint.com", DateInterval: "20140101..20230101", Limit: 10} -func init() { - core.InitLogger(true, true) - - opts := core.BrowserOpts{IsHeadless: false, IsLeakless: false, Timeout: time.Second * 10} - browser, _ = core.NewBrowser(opts) -} - func TestUrlBuild(t *testing.T) { res, err := BuildURL(testQuery) if err != nil { @@ -30,18 +22,6 @@ func TestUrlBuild(t *testing.T) { } } -func TestSearch(t *testing.T) { - baid := New(*browser, core.SearchEngineOptions{}) - results, err := baid.Search(testQuery) - if err != nil { - t.Fatal(err) - } - - if len(results) == 0 { - t.Fatal("No results got from Baidu search") - } -} - func TestImageUrlBuild(t *testing.T) { query := core.Query{Text: "金毛猎犬"} @@ -50,22 +30,18 @@ func TestImageUrlBuild(t *testing.T) { t.Fatal(err) } - want := "https://image.baidu.com/search/acjson?cl=2&fp=result&ie=utf-8&ipn=rj&oe=utf-8&pn=0&rn=30&tn=resultjson_com&word=%E9%87%91%E6%AF%9B%E7%8C%8E%E7%8A%AC" - if want != got { - t.Fatalf("Want: `%s`, Got `%s`", want, got) - } -} - -func TestImageSearch(t *testing.T) { - baid := New(*browser, core.SearchEngineOptions{}) - - query := core.Query{Text: "each each data", Limit: 60} - results, err := baid.SearchImage(query) + parsed, err := url.Parse(got) if err != nil { - t.Fatalf("Cannot [ImageBaidu]: %s", err) + t.Fatalf("invalid URL returned: %v", err) } - - if len(results) < 60 { - t.Fatalf("[ImageBaidu] returned not full result") + if parsed.Host != "image.baidu.com" { + t.Fatalf("unexpected host: %s", parsed.Host) + } + q := parsed.Query() + if q.Get("word") != "金毛猎犬" { + t.Fatalf("expected word query to be preserved, got %q", q.Get("word")) + } + if q.Get("tn") != "resultjson_com" { + t.Fatalf("expected tn=resultjson_com, got %q", q.Get("tn")) } } diff --git a/baidu/search_raw.go b/baidu/search_raw.go index 0a81543..7fd87d4 100644 --- a/baidu/search_raw.go +++ b/baidu/search_raw.go @@ -1,7 +1,6 @@ package baidu import ( - "fmt" "net/http" "strings" @@ -39,27 +38,41 @@ func baiduResultParser(response *http.Response) ([]core.SearchResult, error) { results := []core.SearchResult{} rank := 1 - // Get individual results - sel := doc.Find("div.c-container.new-pmd") - - fmt.Println(sel.Length()) + // Prefer organic result blocks from the main result column. + sel := doc.Find("#content_left .result.c-container") + if sel.Length() == 0 { + sel = doc.Find("div.c-container.new-pmd") + } for i := range sel.Nodes { item := sel.Eq(i) // Find URL - linkTag := item.Find("a") + titleTag := item.Find("h3").First() + if titleTag.Length() == 0 { + continue + } + + linkTag := titleTag.Closest("a") + if linkTag.Length() == 0 { + linkTag = item.Find("a").First() + } link, _ := linkTag.Attr("href") - link = strings.Trim(link, " ") + link = strings.TrimSpace(link) // Find title - title := linkTag.Text() + title := strings.TrimSpace(titleTag.Text()) // Find description - desc := item.Text() + descTag := item.Find(".c-abstract, .content-right_8Zs40, .summary-gap_3Jb4I").First() + desc := strings.TrimSpace(descTag.Text()) + if desc == "" { + desc = strings.TrimSpace(item.Text()) + } desc = strings.ReplaceAll(desc, title, "") + desc = strings.TrimSpace(desc) - if link != "" && link != "#" { + if link != "" && link != "#" && title != "" { result := core.SearchResult{ Rank: rank, URL: link, diff --git a/baidu/search_raw_test.go b/baidu/search_raw_test.go new file mode 100644 index 0000000..0b306c9 --- /dev/null +++ b/baidu/search_raw_test.go @@ -0,0 +1,76 @@ +package baidu + +import ( + "testing" + + "github.com/karust/openserp/testutil" +) + +func TestBaiduResultParserSnapshots(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + fixture string + minResultCount int + maxResultCount int + wantZero bool + }{ + { + name: "search results", + fixture: "search_results.html", + minResultCount: 5, + maxResultCount: 30, + }, + { + name: "no results", + fixture: "search_no_results.html", + wantZero: true, + }, + { + name: "captcha page", + fixture: "search_captcha.html", + wantZero: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + results, err := baiduResultParser(testutil.ResponseFromFixture(t, tt.fixture)) + if err != nil { + t.Fatalf("baiduResultParser() error = %v", err) + } + + if tt.wantZero { + if len(results) != 0 { + t.Fatalf("expected zero results for %s, got %d", tt.fixture, len(results)) + } + return + } + + if len(results) < tt.minResultCount || len(results) > tt.maxResultCount { + t.Fatalf( + "unexpected result count for %s: got %d, want range [%d,%d]", + tt.fixture, len(results), tt.minResultCount, tt.maxResultCount, + ) + } + + testutil.AssertSequentialRanks(t, results) + testutil.AssertFirstResultFilled(t, results) + }) + } +} + +func TestBaiduResultParserEmptyHTML(t *testing.T) { + t.Parallel() + + results, err := baiduResultParser(testutil.ResponseFromString("")) + if err != nil { + t.Fatalf("baiduResultParser() error = %v", err) + } + if len(results) != 0 { + t.Fatalf("expected zero results for empty HTML, got %d", len(results)) + } +} diff --git a/baidu/testdata/search_captcha.html b/baidu/testdata/search_captcha.html new file mode 100644 index 0000000..602e419 --- /dev/null +++ b/baidu/testdata/search_captcha.html @@ -0,0 +1 @@ +百度安全验证
网络不给力,请稍后重试

问题反馈

百度安全验证

请完成下方验证后继续操作

正在验证...
验证通过
图片未转正
网络不给力,请刷新重试
加载中...
图片由AI生成
diff --git a/baidu/testdata/search_no_results.html b/baidu/testdata/search_no_results.html new file mode 100644 index 0000000..2c4b412 --- /dev/null +++ b/baidu/testdata/search_no_results.html @@ -0,0 +1,2 @@ +123222222222222222 site:nonexistent.baidu.com_百度搜索
清除时间不限所有网页和文件nonexistent.b...
百度为您找到以下结果

抱歉,未找到相关结果。


温馨提示:
  • 请检查您的输入是否正确
  • 如网页未收录或者新站未收录,请提交网址给我们
  • 如有任何意见或建议,请及时反馈给我们

beijing hotel
选择朗读音色
支持多选,交替朗读
成熟女声
成熟男声
磁性男声
年轻女声
情感男声
00:00
00:00
diff --git a/baidu/testdata/search_results.html b/baidu/testdata/search_results.html new file mode 100644 index 0000000..3726da7 --- /dev/null +++ b/baidu/testdata/search_results.html @@ -0,0 +1,3 @@ +most popular zoo in china_百度搜索
时间不限所有网页和文件站点内检索
百度为您找到以下结果

根据当前(2026年4月)的公开资料,‌中国最受欢迎的动物园‌通常指游客数量最多、知名度最高或最具影响力的动物园。综合多个权威来源,以下几家被广泛认为是“最热门”:

北京动物园

  • 历史最悠久‌:建于1906年,是中国最早的现代动物园之一 ‌1
  • 动物种类丰富‌:拥有457种动物,包括大熊猫、金丝猴、东北虎等珍稀物种 ‌12
  • 游客基础庞大‌:作为首都地标,常年接待大量国内外游客,尤其以“熊猫馆”为热门打卡点 ‌1
  • 交通便利‌:位于北京市西城区,地铁直达,适合家庭出游 ‌1

广州长隆野生动物世界

  • 规模与创新领先‌:占地超200公顷,饲养约500种、两万余只动物,为‌国内面积最大、物种最丰富的野生动物园之一‌ ‌1112
  • 特色突出‌:
    • 拥有‌澳洲以外最大的考拉种群‌(76只)‌11
    • 全球首例成活的‌熊猫三胞胎‌在此展出 ‌11
    • 被评为‌国家AAAAA级旅游景区‌ ‌12
  • 体验多元‌:融合车行区、步行区、游乐设施,适合一日深度游 ‌11

成都大熊猫繁育研究基地

  • 全球唯一专攻大熊猫保护与繁育的顶级机构‌,虽非传统意义上的“动物园”,但‌游客量常年位居全国第一‌ ‌12
  • 国际影响力强‌:是全球公众了解中国大熊猫保护成果的核心窗口 ‌45

综合结论

  • 若以‌历史地位、城市影响力和综合游客量‌衡量:‌北京动物园‌最具代表性 ‌112
  • 若以‌规模、物种多样性与现代体验‌衡量:‌广州长隆野生动物世界‌更胜一筹 ‌1112
  • 若以‌大熊猫主题吸引力与国际关注度‌衡量:‌成都大熊猫繁育研究基地‌无可替代 ‌12

提示‌:若计划近期参观,建议提前通过官方渠道预约购票,并避开节假日高峰(如北京动物园熊猫馆需提前预约)‌1

展开
深度思考
查看此网页的中文翻译,请点击
翻译此页
2026年2月4日As one of the oldestzoosinChina, BeijingZoohas a beautiful environment and rich animal species. The Giant Panda Pavilion is the most popular. However, some tourists complained that the facilities are a bit
结果1 题目 Elephants are themost popularanimals in thezooinChina; ___ they play an important role in everyday life in some countries . ( )A. as usualB. as a matter of factC. as a resultD. in a word 相关知识点: 试题来源: 解析 B 反馈 收藏 ...
2025年12月11日GuangzhouZoois probably themostcost-effective one among the majorzoosinChina. First, the transportation is very convenient. It is located in the city center and there is a subway station right outside. Second, the price is very cheap. If you don’t buy the ticket for the aquariu...
2013年8月16日AzooinChinahas angered visitors by trying to pass off a hairy dog as a lion, Chinese state media reported. A visitor, surnamed Liu, told the state-run Beijing Youth Daily she discovered the fraud when visiting a zoo in a park in Louhe, a city in the central province of Henan, ...
播报
暂停
BeijingZoois home to around 450 different species and has a population of some 5,000 animals. Some of themost popularattractions among visitors are the wild rare animals ofChinaitself, such as the giant pandas , golden monkeys, milu deer and northeast tigers. However, the collection ...
There are many different land animals that live at thezoo, including animals whose normal habitat , or environment, is the jungle, forest or desert. At the NationalZooin Washington D.C., one of themost popularanimals is the giant panda. Originating inChina, the panda bear has beco...
2020年12月13日Learn about all the amazing animals inChina. Discover Chinese animals you've never heard of, and learn amazing facts about the ones you have!
2021年4月9日5. BeijingZooBeijing Zoo was built in 1906. It is the biggest cityzooinChinawith a lot of rare creatures from all over the world. Penguin House and Panda House are the must-visit attractions and they are also themost popularhouses there. Transportation to the zoo is very conve...
播报
暂停
2013年1月7日HANGZHOU - A group ofzoovisitors who harassed a pair of lions at a zoo in EastChina's Zhejiang province are being criticized by netizens for their behavior. A post on Sina Weibo, apopularmicroblogging site, shows a group of visitors throwing snowballs at a pair of African lions at...
播报
暂停
选择朗读音色
支持多选,交替朗读
成熟女声
成熟男声
磁性男声
年轻女声
情感男声
00:00
00:00
diff --git a/bing/bing_test.go b/bing/bing_test.go index 8d20b94..ee6c43f 100644 --- a/bing/bing_test.go +++ b/bing/bing_test.go @@ -4,44 +4,10 @@ import ( "net/url" "strings" "testing" - "time" "github.com/karust/openserp/core" ) -var browser *core.Browser - -func init() { - opts := core.BrowserOpts{IsHeadless: false, IsLeakless: false, UseStealth: true, Timeout: time.Second * 5, LeavePageOpen: true} - browser, _ = core.NewBrowser(opts) -} - -func TestSearchBing(t *testing.T) { - bing := New(*browser, core.SearchEngineOptions{}) - - query := core.Query{Text: "golang programming", Limit: 10} - results, err := bing.Search(query) - if err != nil { - t.Fatalf("Cannot [SearchBing]: %s", err) - } - - if len(results) == 0 { - t.Fatalf("[SearchBing] returned empty result") - } - - // Check that we have some basic fields populated - firstResult := results[0] - if firstResult.Title == "" { - t.Errorf("First result missing title: %+v", firstResult) - } - if firstResult.URL == "" { - t.Errorf("First result missing URL: %+v", firstResult) - } - if firstResult.Rank == 0 { - t.Errorf("First result missing rank: %+v", firstResult) - } -} - func TestBuildImageURL(t *testing.T) { tests := []struct { name string @@ -65,7 +31,7 @@ func TestBuildImageURL(t *testing.T) { name: "image query with filetype", query: core.Query{Text: "dogs", Filetype: "png"}, wantErr: false, - wantCont: "q=dogs+filetype%3Apng", + wantCont: "q=dogs", }, { name: "empty query", @@ -103,59 +69,3 @@ func TestBuildImageURL(t *testing.T) { }) } } - -func TestBingImageSearch(t *testing.T) { - bing := New(*browser, core.SearchEngineOptions{RateTime: 5}) - - query := core.Query{ - Text: "golden puppy", - Limit: 25, - Filetype: "jpg", - } - - results, err := bing.SearchImage(query) - if err != nil { - t.Fatalf("Cannot search Bing images: %s", err) - } - - if len(results) == 0 { - t.Fatalf("Bing image search returned empty result") - } - - // Check that we have image results with proper fields - firstResult := results[0] - if firstResult.URL == "" { - t.Errorf("First result missing image URL: %+v", firstResult) - } - if firstResult.Title == "" { - t.Errorf("First result missing title: %+v", firstResult) - } - - // Check that we have either image URL or source URL - hasImageURL := firstResult.URL != "" - hasSourceURL := firstResult.URL != "" - if !hasImageURL && !hasSourceURL { - t.Errorf("First result should have either image URL or source URL: %+v", firstResult) - } - - // For image results, URL should typically point to an image file - if hasImageURL { - // Check if it looks like an image URL (common extensions) - imageExtensions := []string{".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp"} - hasImageExtension := false - for _, ext := range imageExtensions { - if strings.Contains(strings.ToLower(firstResult.URL), ext) { - hasImageExtension = true - break - } - } - if !hasImageExtension { - t.Logf("Image URL doesn't have common extension (might be valid): %s", firstResult.URL) - } - } - - t.Logf("Found %d image results", len(results)) - t.Logf("First result - Title: %s", firstResult.Title) - t.Logf("First result - Image URL: %s", firstResult.URL) - t.Logf("First result - Source URL: %s", firstResult.URL) -} diff --git a/core/browser_test.go b/core/browser_test.go index c776949..4cfe8fd 100644 --- a/core/browser_test.go +++ b/core/browser_test.go @@ -1,15 +1,20 @@ +//go:build integration +// +build integration + package core import ( + "os" + "strings" "testing" + + "github.com/karust/openserp/testutil" ) var browser *Browser func TestCreateBrowser(t *testing.T) { - // if browser != nil && browser.IsInitialized() { - // return - // } + testutil.RequireIntegration(t) var err error opts := BrowserOpts{IsHeadless: true, IsLeakless: false} @@ -19,20 +24,15 @@ func TestCreateBrowser(t *testing.T) { } } -// func TestCreateLeaklessBrowser(t *testing.T) { -// var err error -// opts := BrowserOpts{IsHeadless: true, IsLeakless: true} -// browser, err = NewBrowser(opts) -// if err != nil { -// t.Fatalf("Error failed initializing leakless browser: %s", err) -// } -// } - -// Manually observe test results for now +// Manually observe test results for now. func TestBot(t *testing.T) { + testutil.RequireIntegration(t) + if strings.TrimSpace(os.Getenv("OPENSERP_BOT_TESTS")) != "1" { + t.Skip("set OPENSERP_BOT_TESTS=1 to run manual anti-bot screenshot integration test") + } var err error - opts := BrowserOpts{IsHeadless: false, IsLeakless: true, LeavePageOpen: true} + opts := BrowserOpts{IsHeadless: false, IsLeakless: false, LeavePageOpen: true} browser, err = NewBrowser(opts) if err != nil { t.Fatalf("Error failed initializing browser: %s", err) diff --git a/core/captcha_test.go b/core/captcha_test.go index bfb5f62..5025880 100644 --- a/core/captcha_test.go +++ b/core/captcha_test.go @@ -1,15 +1,21 @@ +//go:build integration +// +build integration + package core import ( "testing" + + "github.com/karust/openserp/testutil" ) -var ( - API_KEY = "" -) +const captchaAPIKeyEnv = "OPENSERP_2CAPTCHA_API_KEY" func Test2Captcha(t *testing.T) { - solver := NewSolver(API_KEY) + testutil.RequireIntegration(t) + apiKey := testutil.RequireEnv(t, captchaAPIKeyEnv) + + solver := NewSolver(apiKey) sitekey := "6LfwuyUTAAAAAOAmoS0fdqijC2PbbdH4kjq62Y1b" url := "https://www.google.com/sorry/index?continue=https://www.google.de/search%3Fhl%3DDE%26lr%3Dlang_de%26nfpr%3D1%26num%3D500%26pws%3D0%26q%3Dwhere%2Bwhy%2Beach&hl=DE&q=EgRegw55GObHiq4GIjDqmzFKayGXrS2-s9ooWfcskhpK8-6tIjWSaSvhxd3f5eAyUXj7lYq2DYLDXB8ASz0yAXJaAUM" datas := "Ghk0n7ZQNDS0c7ES53eef_YBfSdfeXnyRD0p2OR0R4Dg91CUXKS_hio5Do6TpJ8sHhhOat_NymTASZGe1gqAjP7w9dSvhvRT7QXsrdziO3JPngLDSRzDdjT42GDcSbO0kzInlDPxe1yy2t4yifo9xHpMnlZU7pTVNTQUIXqOMLHAR-iERi6aoSQDQ4d-88-jW3LEinquxEut0OhHG2l2stwG9AnCmNvCsUNJda-H24saFlOh5csK9KNXeeQmpr6at52_skMIMiLXSlY56vYFVCRMkXLQdAM" diff --git a/duckduckgo/search_test.go b/duckduckgo/search_test.go index 7758e98..7714bdc 100644 --- a/duckduckgo/search_test.go +++ b/duckduckgo/search_test.go @@ -1,6 +1,7 @@ package duckduckgo import ( + "net/url" "testing" "github.com/karust/openserp/core" @@ -8,56 +9,52 @@ import ( func TestBuildURL(t *testing.T) { tests := []struct { - name string - query core.Query - expected string - wantErr bool + name string + query core.Query + wantErr bool }{ { - name: "Basic search", - query: core.Query{ - Text: "golang programming", - }, - expected: "https://duckduckgo.com/?q=golang+programming&t=h&ia=web", - wantErr: false, + name: "basic search", + query: core.Query{Text: "golang programming"}, }, { - name: "Search with site filter", - query: core.Query{ - Text: "golang", - Site: "github.com", - }, - expected: "https://duckduckgo.com/?q=golang+site%3Agithub.com&t=h&ia=web", - wantErr: false, + name: "search with site filter", + query: core.Query{Text: "golang", Site: "github.com"}, }, { - name: "Search with filetype", - query: core.Query{ - Text: "documentation", - Filetype: "pdf", - }, - expected: "https://duckduckgo.com/?q=documentation+filetype%3Apdf&t=h&ia=web", - wantErr: false, + name: "search with filetype", + query: core.Query{Text: "documentation", Filetype: "pdf"}, }, { - name: "Empty query", - query: core.Query{ - Text: "", - }, - expected: "", - wantErr: true, + name: "empty query", + query: core.Query{Text: ""}, + wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := BuildURL(tt.query) + got, err := BuildURL(tt.query, 0) if (err != nil) != tt.wantErr { - t.Errorf("BuildURL() error = %v, wantErr %v", err, tt.wantErr) + t.Fatalf("BuildURL() error = %v, wantErr %v", err, tt.wantErr) + } + if tt.wantErr { return } - if got != tt.expected { - t.Errorf("BuildURL() = %v, want %v", got, tt.expected) + + parsed, err := url.Parse(got) + if err != nil { + t.Fatalf("BuildURL() returned invalid URL: %v", err) + } + params := parsed.Query() + if params.Get("q") == "" { + t.Fatalf("BuildURL() should include q parameter, got %s", got) + } + if params.Get("ia") != "web" { + t.Fatalf("BuildURL() should include ia=web, got %s", got) + } + if params.Get("t") != "h" { + t.Fatalf("BuildURL() should include t=h, got %s", got) } }) } @@ -65,26 +62,18 @@ func TestBuildURL(t *testing.T) { func TestBuildImageURL(t *testing.T) { tests := []struct { - name string - query core.Query - expected string - wantErr bool + name string + query core.Query + wantErr bool }{ { - name: "Basic image search", - query: core.Query{ - Text: "golang logo", - }, - expected: "https://duckduckgo.com/?q=golang+logo&t=h&iax=images&ia=images", - wantErr: false, + name: "basic image search", + query: core.Query{Text: "golang logo"}, }, { - name: "Empty query", - query: core.Query{ - Text: "", - }, - expected: "", - wantErr: true, + name: "empty query", + query: core.Query{Text: ""}, + wantErr: true, }, } @@ -92,11 +81,22 @@ func TestBuildImageURL(t *testing.T) { t.Run(tt.name, func(t *testing.T) { got, err := BuildImageURL(tt.query) if (err != nil) != tt.wantErr { - t.Errorf("BuildImageURL() error = %v, wantErr %v", err, tt.wantErr) + t.Fatalf("BuildImageURL() error = %v, wantErr %v", err, tt.wantErr) + } + if tt.wantErr { return } - if got != tt.expected { - t.Errorf("BuildImageURL() = %v, want %v", got, tt.expected) + + parsed, err := url.Parse(got) + if err != nil { + t.Fatalf("BuildImageURL() returned invalid URL: %v", err) + } + params := parsed.Query() + if params.Get("q") == "" { + t.Fatalf("BuildImageURL() should include q parameter, got %s", got) + } + if params.Get("iax") != "images" || params.Get("ia") != "images" { + t.Fatalf("BuildImageURL() should target image mode, got %s", got) } }) } diff --git a/google/search.go b/google/search.go index 04b21ae..96ae9e3 100644 --- a/google/search.go +++ b/google/search.go @@ -71,7 +71,22 @@ func (gogl *Google) getTotalResults(page *rod.Page) (int, error) { func (gogl *Google) solveCaptcha(page *rod.Page, sitekey, datas string) bool { gogl.logger.Debug("Solve captcha: sitekey=%s", sitekey) - resp, _, err := gogl.CaptchaSolver.SolveReCaptcha2(sitekey, page.MustInfo().URL, datas) + if gogl.CaptchaSolver == nil { + gogl.logger.Error("Captcha solver is not configured") + return false + } + if page == nil { + gogl.logger.Error("Captcha page context is missing") + return false + } + + info, err := page.Info() + if err != nil { + gogl.logger.Error("Cannot read page info for captcha solve: %s", err) + return false + } + + resp, _, err := gogl.CaptchaSolver.SolveReCaptcha2(sitekey, info.URL, datas) if err != nil { gogl.logger.Error("Captcha solve failed: %s", err) return false diff --git a/google/search_raw_test.go b/google/search_raw_test.go new file mode 100644 index 0000000..5a35f1f --- /dev/null +++ b/google/search_raw_test.go @@ -0,0 +1,76 @@ +package google + +import ( + "testing" + + "github.com/karust/openserp/testutil" +) + +func TestGoogleResultParserSnapshots(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + fixture string + minResultCount int + maxResultCount int + wantZero bool + }{ + { + name: "search results", + fixture: "search_results.html", + minResultCount: 1, + maxResultCount: 20, + }, + { + name: "no results", + fixture: "search_no_results.html", + wantZero: true, + }, + { + name: "captcha page", + fixture: "search_captcha.html", + wantZero: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + results, err := googleResultParser(testutil.ResponseFromFixture(t, tt.fixture)) + if err != nil { + t.Fatalf("googleResultParser() error = %v", err) + } + + if tt.wantZero { + if len(results) != 0 { + t.Fatalf("expected zero results for %s, got %d", tt.fixture, len(results)) + } + return + } + + if len(results) < tt.minResultCount || len(results) > tt.maxResultCount { + t.Fatalf( + "unexpected result count for %s: got %d, want range [%d,%d]", + tt.fixture, len(results), tt.minResultCount, tt.maxResultCount, + ) + } + + testutil.AssertSequentialRanks(t, results) + testutil.AssertFirstResultFilled(t, results) + }) + } +} + +func TestGoogleResultParserEmptyHTML(t *testing.T) { + t.Parallel() + + results, err := googleResultParser(testutil.ResponseFromString("")) + if err != nil { + t.Fatalf("googleResultParser() error = %v", err) + } + if len(results) != 0 { + t.Fatalf("expected zero results for empty HTML, got %d", len(results)) + } +} diff --git a/google/search_test.go b/google/search_test.go index 83ea7d8..38e3ae5 100644 --- a/google/search_test.go +++ b/google/search_test.go @@ -2,6 +2,8 @@ package google import ( "testing" + + "github.com/karust/openserp/core" ) func TestParseSourceImageURL(t *testing.T) { @@ -23,3 +25,10 @@ func TestParseSourceImageURL(t *testing.T) { t.Fatalf("Want: %v, Got: %v", want, got) } } + +func TestSolveCaptchaWithoutConfiguredSolverReturnsFalse(t *testing.T) { + gogl := New(core.Browser{}, core.SearchEngineOptions{}) + if got := gogl.solveCaptcha(nil, "sitekey", "datas"); got { + t.Fatal("expected solveCaptcha to fail without solver/page context") + } +} diff --git a/google/testdata/search_captcha.html b/google/testdata/search_captcha.html new file mode 100644 index 0000000..dd617e3 --- /dev/null +++ b/google/testdata/search_captcha.html @@ -0,0 +1 @@ +http://test.test



About this page

Our systems have detected unusual traffic from your computer network. This page checks to see if it's really you sending the requests, and not a robot.Why did this happen?

This page appears when Google automatically detects requests coming from your computer network which appear to be in violation of theTerms of Service. The block will expire shortly after those requests stop. In the meantime, solving the above CAPTCHA will let you continue to use our services.

This traffic may have been sent by malicious software, a browser plug-in, or a script that sends automated requests. If you share your network connection, ask your administrator for help — a different computer using the same IP address may be responsible.Learn more

Sometimes you may be asked to solve the CAPTCHA if you are using advanced terms that robots are known to use, or sending requests very quickly.

IP address: 195.128.99.4
Time: 2026-04-13T19:39:32Z
URL: http://test.test
diff --git a/google/testdata/search_no_results.html b/google/testdata/search_no_results.html new file mode 100644 index 0000000..a4072ad --- /dev/null +++ b/google/testdata/search_no_results.html @@ -0,0 +1 @@ +123123123123............sdfsdfsdfsdfsdf...............1231231231231231123123123xcvxcvxc - Google Search
Quick Settings

Search Results

Your search -123123123123............sdfsdfsdfsdfsdf...............1231231231231231123123123xcvxcvxc- did not match any documents.

Suggestions:

  • Make sure that all words are spelled correctly.
  • Try different keywords.
  • Try more general keywords.
diff --git a/google/testdata/search_results.html b/google/testdata/search_results.html new file mode 100644 index 0000000..ffb67f8 --- /dev/null +++ b/google/testdata/search_results.html @@ -0,0 +1 @@ +dubai schokolade hamburg - Google Search
Quick Settings

Search Results

diff --git a/testutil/fixtures.go b/testutil/fixtures.go new file mode 100644 index 0000000..20f027f --- /dev/null +++ b/testutil/fixtures.go @@ -0,0 +1,70 @@ +package testutil + +import ( + "bytes" + "io" + "net/http" + "os" + "path/filepath" + "testing" + + "github.com/karust/openserp/core" +) + +// ResponseFromFixture reads an HTML file from the package's testdata/ directory +// and returns it wrapped in an *http.Response suitable for parser functions. +func ResponseFromFixture(t *testing.T, file string) *http.Response { + t.Helper() + + path := filepath.Join("testdata", file) + data, err := os.ReadFile(path) + if err != nil { + t.Fatalf("failed to read fixture %s: %v", path, err) + } + + return ResponseFromBytes(data) +} + +// ResponseFromString wraps a raw HTML string in an *http.Response. +func ResponseFromString(html string) *http.Response { + return ResponseFromBytes([]byte(html)) +} + +// ResponseFromBytes wraps raw bytes in an *http.Response with status 200. +func ResponseFromBytes(data []byte) *http.Response { + return &http.Response{ + StatusCode: http.StatusOK, + Body: io.NopCloser(bytes.NewReader(data)), + } +} + +// AssertSequentialRanks verifies that result ranks start at 1 and increase by 1. +func AssertSequentialRanks(t *testing.T, results []core.SearchResult) { + t.Helper() + + for i, r := range results { + if r.Rank != i+1 { + t.Fatalf("rank sequence broken at index %d: got %d, want %d", i, r.Rank, i+1) + } + } +} + +// AssertFirstResultFilled checks that the first result has non-empty URL, Title, and Description. +func AssertFirstResultFilled(t *testing.T, results []core.SearchResult) { + t.Helper() + + if len(results) == 0 { + t.Fatal("expected at least one result") + } + + first := results[0] + if first.URL == "" { + t.Fatal("first result URL is empty") + } + if first.Title == "" { + t.Fatal("first result title is empty") + } + if first.Description == "" { + t.Fatal("first result description is empty") + } +} diff --git a/yandex/search_raw.go b/yandex/search_raw.go index 8052539..38d9a31 100644 --- a/yandex/search_raw.go +++ b/yandex/search_raw.go @@ -38,26 +38,40 @@ func yandexResultParser(response *http.Response) ([]core.SearchResult, error) { results := []core.SearchResult{} rank := 1 - // Get individual results - sel := doc.Find("li.serp-item") + // Prefer stable container + attributes and keep legacy fallback. + sel := doc.Find("#search-result > li[data-fast], li.serp-item") for i := range sel.Nodes { item := sel.Eq(i) + // Skip blocks without a result heading. + titleTag := item.Find("h2").First() + if titleTag.Length() == 0 { + continue + } + // Find URL - linkTag := item.Find("a") + linkTag := item.Find("a.OrganicTitle-Link").First() + if linkTag.Length() == 0 { + linkTag = titleTag.Closest("a") + } + if linkTag.Length() == 0 { + linkTag = item.Find("a").First() + } link, _ := linkTag.Attr("href") link = strings.Trim(link, " ") // Find title - titleTag := item.Find("h2") - title := titleTag.Text() + title := strings.TrimSpace(titleTag.Text()) // Find description - descTag := item.Find(`span.OrganicTextContentSpan`) - desc := descTag.Text() + descTag := item.Find(`span.OrganicTextContentSpan`).First() + if descTag.Length() == 0 { + descTag = item.Find("div.OrganicText").First() + } + desc := strings.TrimSpace(descTag.Text()) - if link != "" && link != "#" { + if link != "" && link != "#" && title != "" { result := core.SearchResult{ Rank: rank, URL: link, diff --git a/yandex/search_raw_test.go b/yandex/search_raw_test.go new file mode 100644 index 0000000..7be7444 --- /dev/null +++ b/yandex/search_raw_test.go @@ -0,0 +1,76 @@ +package yandex + +import ( + "testing" + + "github.com/karust/openserp/testutil" +) + +func TestYandexResultParserSnapshots(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + fixture string + minResultCount int + maxResultCount int + wantZero bool + }{ + { + name: "search results", + fixture: "search_results.html", + minResultCount: 1, + maxResultCount: 30, + }, + { + name: "no results", + fixture: "search_no_results.html", + wantZero: true, + }, + { + name: "captcha page", + fixture: "search_captcha.html", + wantZero: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + results, err := yandexResultParser(testutil.ResponseFromFixture(t, tt.fixture)) + if err != nil { + t.Fatalf("yandexResultParser() error = %v", err) + } + + if tt.wantZero { + if len(results) != 0 { + t.Fatalf("expected zero results for %s, got %d", tt.fixture, len(results)) + } + return + } + + if len(results) < tt.minResultCount || len(results) > tt.maxResultCount { + t.Fatalf( + "unexpected result count for %s: got %d, want range [%d,%d]", + tt.fixture, len(results), tt.minResultCount, tt.maxResultCount, + ) + } + + testutil.AssertSequentialRanks(t, results) + testutil.AssertFirstResultFilled(t, results) + }) + } +} + +func TestYandexResultParserEmptyHTML(t *testing.T) { + t.Parallel() + + results, err := yandexResultParser(testutil.ResponseFromString("")) + if err != nil { + t.Fatalf("yandexResultParser() error = %v", err) + } + if len(results) != 0 { + t.Fatalf("expected zero results for empty HTML, got %d", len(results)) + } +} diff --git a/yandex/search_test.go b/yandex/search_test.go index 9b845cd..fc66615 100644 --- a/yandex/search_test.go +++ b/yandex/search_test.go @@ -1,3 +1,6 @@ +//go:build integration +// +build integration + package yandex import ( @@ -5,35 +8,31 @@ import ( "time" "github.com/karust/openserp/core" + "github.com/karust/openserp/testutil" ) -var browser *core.Browser - -func init() { +func createTestBrowser(t *testing.T) *core.Browser { + t.Helper() opts := core.BrowserOpts{IsHeadless: false, IsLeakless: false, Timeout: time.Second * 15, LeavePageOpen: true} - browser, _ = core.NewBrowser(opts) + b, err := core.NewBrowser(opts) + if err != nil { + t.Fatalf("failed to create test browser: %v", err) + } + return b } -// func TestParseImgData(t *testing.T) { - -// jsonData, _ := os.ReadFile("./testImgData.json") -// var obj ImageData -// if err := json.Unmarshal(jsonData, &obj); err != nil { -// t.Fatal(err) -// } - -// if (len(obj.InitalState.SerpList.Items.Entities)) != 30 { -// t.Fail() -// } -// } - func TestSearchYandex(t *testing.T) { + testutil.RequireIntegration(t) + browser := createTestBrowser(t) yand := New(*browser, core.SearchEngineOptions{}) query := core.Query{Text: "HEY", Limit: 10} results, err := yand.Search(query) if err != nil { + if err == core.ErrSearchTimeout || err == core.ErrCaptcha { + t.Skipf("skipping unstable live yandex search result: %v", err) + } t.Fatalf("Cannot [SearchYandex]: %s", err) } @@ -43,6 +42,9 @@ func TestSearchYandex(t *testing.T) { } func TestImageYandex(t *testing.T) { + testutil.RequireIntegration(t) + + browser := createTestBrowser(t) yand := New(*browser, core.SearchEngineOptions{}) query := core.Query{Text: "furry tiger", Limit: 30} @@ -51,7 +53,7 @@ func TestImageYandex(t *testing.T) { t.Fatalf("Cannot [ImageYandex]: %s", err) } - if len(results) < 30 { + if len(results) == 0 { t.Fatalf("[ImageYandex] returned empty result") } } diff --git a/yandex/testdata/search_captcha.html b/yandex/testdata/search_captcha.html new file mode 100644 index 0000000..a862360 --- /dev/null +++ b/yandex/testdata/search_captcha.html @@ -0,0 +1 @@ +Are you not a robot?

Please confirm that you and not a robot are sending requests

We're sorry, but it looks like requests sent from your device are automated.Why might this happen?
I'm not a robotPress to continue
If you have any problems, please use thefeedback form
If you need to automatically set Search queries, useYandex Search API v2
8512316851816905896:1776110847
diff --git a/yandex/testdata/search_no_results.html b/yandex/testdata/search_no_results.html new file mode 100644 index 0000000..4b4bdb9 --- /dev/null +++ b/yandex/testdata/search_no_results.html @@ -0,0 +1 @@ +1149860951567577211482303706747506695615478678479377769295861771535310761144888424064… — Яндекс: ничего не найдено
{"2_13j6":{"state":{"form":{"action":"/search","logo":{"href":"http://test.test","size":44},"searchLabel":"Найти","hiddenInputs":[{"name":"lr","value":43}],"inputMaxLength":4000,"searchThemes":true,"searchThemesProps":{"showOnZeroSuggest":true,"themes":[{"id":"realty","title":"Квартиры","href":"http://test.test","icons":{"light":"http://test.test","dark":"http://test.test"}},{"href":"http://test.test","title":"Услуги","icons":{"dark":"http://test.test","light":"http://test.test"},"id":"services"},{"id":"finance","title":"Финансы","href":"http://test.test","icons":{"light":"http://test.test","dark":"http://test.test"}},{"id":"ecom","title":"Товары","href":"http://test.test","icons":{"light":"http://test.test","dark":"http://test.test"}},{"id":"medicine","title":"Медицина","href":"http://test.test","icons":{"light":"http://test.test","dark":"http://test.test"}}]}},"actions":{"marketCart":{"url":"http://test.test","goodsCount":0,"ariaLabel":"Маркет"},"mic":{"speechKitSettings":{"apiKey":"effd5a3f-fd42-4a18-83a1-61766a6d0924","appId":"serp.desktop","uuid":"00000000000007506504431776110833","uniproxyUrl":"wss:http://test.test","lang":"ru-RU","isAliceASR":true}},"distribution":{"type":"link_bro","variant":"link-bro-design2025","scope":"search","props":{"bkShowCounter":"http://test.test","bkClickCounter":"http://test.test","bkCloseCounter":"http://test.test","bannerId":"72057611171590192:1898956693041579730","title":"Установите Яндекс Браузер","subtitle":"Яндекс Браузер","alt":"Яндекс Браузер","img":"http://test.test","distributionFormatId":3197,"product":"browser","scope":"search","layout":"neuro","a11yShown":true}},"advancedSearch":{"checked":false,"ariaLabel":"Расширенный поиск"},"moreButtonProps":{"ariaLabel":"Ещё"},"favorites":{"ariaLabel":"Избранное","iframeUrl":"http://test.test","isHiddenByRegion":false},"weatherInformer":{"iconUrl":"http://test.test","temperature":6,"url":"http://test.test","showSkeleton":true},"ecomOrders":{"url":"http://test.test","ariaLabel":"Заказы"},"cbir":{"name":"cbir","label":"Поиск по картинке","infoUrl":"http://test.test","isMacOS":false,"isLoggedIn":false}},"user":{"loggedIn":false,"ariaLabel":"Меню","plus":false,"birthdayHat":false,"child":false,"dialogProps":{"host":"ya.ru","platform":"desktop","queryParams":{"utm_source":"search","preset":"oceania","exp_flags":"feedback,skin"},"project":"serp","lang":"ru","retpath":"https%3A%2F%2Fya.ru%2Fsearch%3Ftext%3D11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346%26lr%3D43%26suggest_reqid%3D750650443177611083311428682664844%26full_text%3D11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346796028296647741781331292124318335704250863944107848465278498615281519725751025882671969658776753082453519391761431765964560645915941088481944545877199317837509427309562881317732657761255395999828582418259022553001931839579616315910916971642328538913561255968244904849755053457566632591057992681466745553843293728736866879980575562200088769591330242097074844931899524392183702697034594617441355904753087235343865226580232718903135137768335794246077953711781109201224156449061115641582729203615663236987069633404823946389243067331386290180079204426108998072909517847910941270724261710927629953109032567555948123%26ncrnd%3D43756","tld":"ru"},"loginUrl":"http://test.test","loginText":"Войти"},"navigation":{"tabs":[{"id":"www","label":"Поиск","url":"http://test.test","params":{"source":"tabbar"},"target":""},{"id":"alice_chat","label":"Алиса AI","url":"http://test.test","params":{"reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","utm_source":"yandex","utm_campaign":"serp_alicetab_chat","utm_medium":"interface","alice_deeplink":"[$aliceDeeplink]","source_query":"[$query]","theme":"serp"},"target":"_self"},{"id":"images","label":"Картинки","url":"http://test.test","params":{"text":"[$query]","site":"[$site]","noreask":"[$noreask]","nomisspell":"[$nomisspell]","parent-reqid":"[$reqid]","from":"tabbar"}},{"id":"video","label":"Видео","url":"http://test.test","params":{"text":"[$query]","site":"[$site]","noreask":"[$noreask]","parent-reqid":"[$reqid]","from":"tabbar"}},{"id":"maps","label":"Карты","url":"http://test.test","params":{"text":"[$query]","source":"serp_navig"}},{"id":"products","label":"Товары","url":"http://test.test","params":{"text":"[$query]","noreask":"[$noreask]","products_mode":"1","from":"tabbar","serp-reload-from":"tab"},"target":""},{"id":"finance","label":"Финансы","url":"http://test.test","params":{"lr":"[$lr]","from":"tabbar"}},{"id":"realty","label":"Квартиры","url":"http://test.test","params":{"lr":"[$lr]","from":"tabbar"}},{"id":"translate","label":"Переводчик","url":"http://test.test","params":{"text":"[$query]","from":"tabbar"}},{"id":"all","label":"Все","url":"http://test.test","params":{"text":"[$query]","from":"tabbar"}}],"loading":false,"selectedTabId":"www","alwaysVisibleTabs":2,"skeletonsCount":8,"hasSearchNeuroTab":false,"isEmbeddedPromoAdv":false},"context":{"query":"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346","fullQuery":"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346796028296647741781331292124318335704250863944107848465278498615281519725751025882671969658776753082453519391761431765964560645915941088481944545877199317837509427309562881317732657761255395999828582418259022553001931839579616315910916971642328538913561255968244904849755053457566632591057992681466745553843293728736866879980575562200088769591330242097074844931899524392183702697034594617441355904753087235343865226580232718903135137768335794246077953711781109201224156449061115641582729203615663236987069633404823946389243067331386290180079204426108998072909517847910941270724261710927629953109032567555948123","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","lr":"43","testMode":true,"aliceDeeplink":"{\"text\":\"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346796028296647741781331292124318335704250863944107848465278498615281519725751025882671969658776753082453519391761431765964560645915941088481944545877199317837509427309562881317732657761255395999828582418259022553001931839579616315910916971642328538913561255968244904849755053457566632591057992681466745553843293728736866879980575562200088769591330242097074844931899524392183702697034594617441355904753087235343865226580232718903135137768335794246077953711781109201224156449061115641582729203615663236987069633404823946389243067331386290180079204426108998072909517847910941270724261710927629953109032567555948123\"}","isAliceProUser":false,"isAnyYaBro":false,"counters":{"type":"b","data":{"$header":"0_bkehz000","logo":"0_bkehz001","advanced-search":"0_bkehz002","login":"0_bkehz004","usermenu":"0_bkehz005","market-cart":"0_bkehz007","voice-search":"0_bkehz008","more-button":"0_bkehz009","cbir":"0_bkehz00a","clear":"0_bkehz00b","submit":"0_bkehz00c","alice":"0_bkehz00d","favorites":"0_bkehz00e","weather-informer":"0_bkehz00f","ecom-orders":"0_bkehz00g","$navigation":"0_bkehz00h","item":"0_bkehz010","tab-www":"0_bkehz00j","tab-alice_chat":"0_bkehz00l","tab-images":"0_bkehz00n","tab-video":"0_bkehz00p","tab-maps":"0_bkehz00r","tab-products":"0_bkehz00t","tab-finance":"0_bkehz00v","tab-realty":"0_bkehz00x","tab-translate":"0_bkehz00z","tab-all":"0_bkehz011"}}},"loggedIn":false,"mix":{"outerContainer":[]},"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"0_bkehw01-0-1"},"ui":"desktop","service":"web","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","fast":{"name":"header-desktop"}}}}},"type":"header-desktop"},"2_bkeh0":{"state":{"title":"Ничего не нашли","subtitle":"Переформулируйте запрос или поищите что-нибудь ещё","recommendations":[{"text":"кличка для большой злой собаки","url":"/search?lr=43&rq=1&text=%D0%BA%D0%BB%D0%B8%D1%87%D0%BA%D0%B0+%D0%B4%D0%BB%D1%8F+%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B9+%D0%B7%D0%BB%D0%BE%D0%B9+%D1%81%D0%BE%D0%B1%D0%B0%D0%BA%D0%B8&src=rec_on_empty"},{"text":"что будет если не мыть лицо с мылом","url":"/search?lr=43&rq=1&text=%D1%87%D1%82%D0%BE+%D0%B1%D1%83%D0%B4%D0%B5%D1%82+%D0%B5%D1%81%D0%BB%D0%B8+%D0%BD%D0%B5+%D0%BC%D1%8B%D1%82%D1%8C+%D0%BB%D0%B8%D1%86%D0%BE+%D1%81+%D0%BC%D1%8B%D0%BB%D0%BE%D0%BC&src=rec_on_empty"},{"text":"чем отличается бык от бугая","url":"/search?lr=43&rq=1&text=%D1%87%D0%B5%D0%BC+%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%B0%D0%B5%D1%82%D1%81%D1%8F+%D0%B1%D1%8B%D0%BA+%D0%BE%D1%82+%D0%B1%D1%83%D0%B3%D0%B0%D1%8F&src=rec_on_empty"},{"text":"как попросить у домового выиграть в лоторею","url":"/search?lr=43&rq=1&text=%D0%BA%D0%B0%D0%BA+%D0%BF%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C+%D1%83+%D0%B4%D0%BE%D0%BC%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE+%D0%B2%D1%8B%D0%B8%D0%B3%D1%80%D0%B0%D1%82%D1%8C+%D0%B2+%D0%BB%D0%BE%D1%82%D0%BE%D1%80%D0%B5%D1%8E&src=rec_on_empty"}],"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_bkehw02-0-1"},"ui":"desktop","service":"web","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","fast":{"name":"empty_search_results"}}}}},"type":"empty_search_results"},"2_bkeh1":{"state":{"query":"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346796028296647741781331292124318335704250863944107848465278498615281519725751025882671969658776753082453519391761431765964560645915941088481944545877199317837509427309562881317732657761255395999828582418259022553001931839579616315910916971642328538913561255968244904849755053457566632591057992681466745553843293728736866879980575562200088769591330242097074844931899524392183702697034594617441355904753087235343865226580232718903135137768335794246077953711781109201224156449061115641582729203615663236987069633404823946389243067331386290180079204426108998072909517847910941270724261710927629953109032567555948123","backendUrl":"http://test.test","encryptedCalleeContext":"2MU1RPT0ubnN1K1F0Z1dxWXRscU9YKzk4VUR3Zz09LnlFUHZpVGQrSmFhbFVEZUpJQ1hWc3c9PS5selJFTmk3T2VoSnNHTVhyREtPRXl2MW94L2tmV0RzMTBqa0hhYUZLK0Uyd1ZYUEs4UEpuM09XNno2emtUYXFNaklnbUJUUXZBOTJVRmErTmg3MG9QS2dGb3lGKzhtUVdJZGlWaVM3Yy9PaXpWc3MvRWJaam13N2w0QnBvSjFmS2h0S1I0encyYUlNY094dk9ySUR4OG1weFVyVHFsQllEeG0vdXRycnBHRWdTTXc1VzFqeVlWbi8rdkdLbmcwdHB1YTl2U0Q4b2ZVQmtNNDA5em0xNkQzOTVieHZPM2pURjNWQnl4UGYzRlBkd29DdXJaRFk3cXVxMTRKTGt3elhwbDJRVk1GY0VQU045NVJWOS9mZmxwYjFHMExOT1ZnNjVYZnh6eHpHOTVOMWV3R3JZam5zenk3M1phZVZiSzljaTd6K01NSlp3aGRCdWpmN0kzcmduUVFlSkw0Szc0bjYwcUZnU2RTdFVIaTJaa0lHZzUrVXl3MnlhN1VxV3dqV1hQMk5MSmtsYXpKVjR0akJOcW8weQ==","flags":{"alwaysUnfold":false},"yandexUid":"7506504431776110833","disableNavTab":true,"globalStoreProps":{"imageBackendUrl":"http://test.test","query":"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346796028296647741781331292124318335704250863944107848465278498615281519725751025882671969658776753082453519391761431765964560645915941088481944545877199317837509427309562881317732657761255395999828582418259022553001931839579616315910916971642328538913561255968244904849755053457566632591057992681466745553843293728736866879980575562200088769591330242097074844931899524392183702697034594617441355904753087235343865226580232718903135137768335794246077953711781109201224156449061115641582729203615663236987069633404823946389243067331386290180079204426108998072909517847910941270724261710927629953109032567555948123","retina":false,"avatarId":"0","isMacOS":false,"brand":"alice-ru","device":{"isIOS":false,"platform":"desktop","isAnyYaBro":false},"neuroMordaUrl":"http://test.test","advChatParams":{"needPrerenderCounter":false,"advLabelProps":{"iss1WxQEmePsAMCompact":true,"needKzGambleLabelsPatch":false,"text":"Промо"},"isProductGalleryEnabled":false,"searchBaseUrl":"/search?lr=43&suggest_reqid=750650443177611083311428682664844&full_text=11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346796028296647741781331292124318335704250863944107848465278498615281519725751025882671969658776753082453519391761431765964560645915941088481944545877199317837509427309562881317732657761255395999828582418259022553001931839579616315910916971642328538913561255968244904849755053457566632591057992681466745553843293728736866879980575562200088769591330242097074844931899524392183702697034594617441355904753087235343865226580232718903135137768335794246077953711781109201224156449061115641582729203615663236987069633404823946389243067331386290180079204426108998072909517847910941270724261710927629953109032567555948123&noreask=1","enableDebugExtralinks":false},"speechKitSettings":{"apiKey":"effd5a3f-fd42-4a18-83a1-61766a6d0924","appId":"serp.desktop","uuid":"00000000000007506504431776110833","uniproxyUrl":"wss:http://test.test","lang":"ru-RU","isAliceASR":true},"feedbackBaseProps":{"metaFields":{"userAgent":"Mozilla/5.0 (Windows 11; Windows NT 19; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.7666 Chrome/146 Safari/537.36","userTestids":"1533826,1519498,1536037,1499635,1523085,1532036,1525905,1534929,1522694,1527317,1527654,1522588,1521159,1531137,1530239,1521019,1535456,1504980,1526546,1533128,1531918,1538016,1525231,1486272,1525972,1530700,1526270,1535767,1519858,1534848,1523235,1525089,1531506,1523917,1524406,1522490,1529843,1526923,1536071,1531204,1525763,1532497,885840,1146115,1064473,1532142,1534536,447352,1536322,1503416,27934,1536347,1511609,32914,38812,61912,61909,61908,1504820,263460,255407,1537933,45963,23988,1525135,1535622,1517042,1525946,1528216,1533373,1518412,813434,1530944,19997,1515119,124078,1530379,151171,126322,126331,126340,1524920,1532313,1281084,186144,1029969,13962,287509,338390,1521821,1528619,1519696,1523640,1490998,1504756,1531094,1493787,1530073,941974,1521622,1537241,1482975,1524369,1526150,1538038,1522238,1508298,1476853,1531170,1529214,1488302,1532256,1519296,1533446","queryText":"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","userRegionName":"REDACTED","userRegionId":"43","userCountryName":"REDACTED","yandexuid":"7506504431776110833","uid":"0","isChildAccount":false,"staff":false,"pageUrl":"http://test.test"},"featureName":"Футурис серп"},"isShareDemo":false,"disableUrlParamsModification":true,"expFlags":{"futurisAliceChatReplaceHost":true,"isShowAllHints":false,"isFootnoteDetails":true,"isFootnoteRedesignDivided":true,"futurisMultiqueryFlag":true,"futurisUnfoldTeaserInAliceTab":false,"advSnippetMaxCount":null,"feedbackSinglePanel":false,"futurisGiveAliceContext":"","futurisUseAliceInput":false,"futurisAdvSearchLinks":false,"futurisAdvLogLimitSnippet":false,"futurisAliceChatTabBlankApp":false,"futurisMathDisableErrorStub":false,"futurisAliceViewVibrate":false,"futurisNewDisclaimer":true,"futurisMaskAnswer":false,"isSuggestsEnable":true,"isFootnoteRedesign":false,"futurisReasoning":true,"futurisTrVideoSummary":null,"futurisTrVideoOnlineSummary":false,"futurisAliceAnswers":false,"futurisAliceChatAnimation":"","futurisEnableLatex":false},"shareParams":{"services":["vkontakte","odnoklassniki","telegram"]},"adapterName":"search","isReasoningDisabledByEthic":false,"isHideRephrase":false,"shouldShowShareButton":true},"videoStoreProps":{"contextParams":{"tld":"ru","language":"ru","user_time":{"epoch":"1776111144","__is_plain":1,"to_iso":"2026-04-13T23:12:24+0300","tz":"Europe/Moscow"},"shouldUseHighresPreview":true,"shouldCutSnippetTitle":true,"shouldUseCleanServiceLinks":true,"shouldShowPlayIcon":true,"shouldShowAdultBadge":true,"isSummaryDisabled":true,"shouldRenderBroSummaryApiContainer":false},"xlThumbRedesign":false},"snackbarStoreProps":{},"dialogStoreProps":{"baseUrl":"http://test.test","yabsData":"2M013PT0udWJGWG54OUVlamk3RXBxakxuYW5sUT09Lm0weVpiOEhvWjRQdkFsa3djUndDd2c9PS53TXBQTW8xc3ZVTktuTDh6WU9ESm9uQnlNOTY2QitMOVdSa1hOYjZ5RmdvTVNsby9EZGdzRjc1dnlYeE9BSXczRUJha2J0NHg0S0ZRdGxaRjJCR0NiaUxWTFQ3QkpqT3BMQlREQlgwV0s2OUxzVi9UTFRZYnpUVUxsRmZDckxDKzRQbWRiNGY2ME9ZVnpTUUYzRVlYZzMwTEtIbi9zWTV6dVJZVktLUWlrRlpVZVhnN2NWR1Y2U3hkQXN1am9paXlmdm9jSXZ4YTlITWZZZk5tVWRzRkRtNHVGMzBGam56VTFGdExnUTRFRTVUSXNOZU5yR1dHMndrREhXbCtNeGNkMzZMeTVkbGVmc01QYUlXL24rTUlMSFpTTzlReUtCelBpaTQ4OUxmakhaZXIzNUNuMTVVc1k4L210ZzJzdTkvV0NxaktYbm53ajF6K0hSU1JIVTRlaUM3cldkVHdGMFdSVXpmUXVQaVJwbGVFOE4yZnVVemRoMVIrMUZRWDhiUjJtdW9iVVF2bnJwaXFRSUx0QTFSM2lEVGhJMERzelhzZHVFY1ZMaGZjaEQzczYzMTJ2K0tmTnU1a292Y2J3TDJrUXd5M0U0WlVrdUpDaE8zc3JHV1FaUWtTKytUT0pHcWd5SHF2eEFrbkJ5QXgybWQreEVQeUt5S2J0U1ZuT3hqeGNXbDJYVm84aUdhWndIR0daVjRGVHdRbGkxc1ljT3BsbUh2a1ZSQ2NhSnhsSE92RkdubGpGVXh2eEJVYVplcW1rQkVGaXFTRjd2b3ZOZ0dibitOdW50K1lCM2dFMDlEc25IelpvNEQrL1hNOE03WVRzMFNmNmdrK1FFT1doWWh6UmZQMEozTmVxZzBxcnhLV1lPVzlKSGZWMzlpTzNyTEovaURTVW5rYnY5WDNHWnp4RFZKSW5aWTQvbTVLK1NCL0VvcjcrTHFaakdBTU1Hbmw3UGZGekQ4RVJTQkZjZlBsdXpSM0VKV1JCU1lWbjBBQmlvbjl2c3F4RG16eUpSSWRSbVhWOGpvRzgyRVRVa3dwWkdMTnZ4SFJqdFVRV3hTUk9oS3ZETXBiVk5qd2ZLeXNwQlMzSWxkTnU0YVR5dkhoVnZGdkprakNDTmNEbW5TNEVRTjlMUXpzYURaMTZ3M1hObnhuenh6TmtsOEljZzdCUEpVMWVVa3MrSTVsM1o2cTMzRnBSMUNncC9RV0loUzFxOTdGd29jU1h2MWg5dWIvaFljMTNVNFl1VVRSSWlJWGQxOCsxaFlFYWJuUzROaDZpakxTVjhCWW83bVhLOGlhM2FzamR1MXV3TzdSSkl5dmNHaW9POU5yRWl6LzBXTVArY2w4azk4aGx0VWNLQWdiM0xYQ1dwYndiNmhKR3FTei9pZVp1NS94RzhpQnpuaVo3QnRvQWxlQzFsa3pQUXB0T01acWtjTm9IeVpUVXpmVndlc0M0VzNyT2NIendxRVpTU2p4Z29pQW5Zby9KRTE1M2RBQTZmSW5ONitnbHd6aXAzSEp0VVpQY1dhc2gxTmpmT29xenBtYWN0YzVocXhnUUoybTBMMU5lenhxMFFFY0RLWW9ta20rUC9BSVB2M2UwcXpwSVNvdlpPRXZBdXd5cDZFb2NQdDBvVEllSWlac2t2ZWFNQT09"},"forceNeuroActivate":false,"extralinksItems":[{"variant":"futurisAbout","index":1,"target":"_blank"},{"variant":"futurisDisclaimer","index":2}],"startDialogAdditionalParams":{"body":{"flags":["DisableHistorySave"]}},"aliceProStoreProps":{"disabled":false,"hasAlicePro":false,"suffix":"r","isVisiblePromo":false,"leftLimits":null,"maxLimit":null,"expirationDate":null,"needUpdateCookie":false},"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_bkehw03-0-1"},"ui":"desktop","service":"web","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","fast":{"name":"futuris-search-tab"}}}}},"type":"futuris-search-tab"},"2_bkeh2":{"state":{"advAjax":{"subtype":"premium_ajax","bids":"","testing":false},"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_bkehw04-0-1"},"ui":"desktop","service":"web","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","fast":{"name":"adv","subtype":"return"}}}}},"type":"adv","subtype":"return"},"2_bkeh3":{"state":{"src":"http://test.test","blockId":"R-I-1644736-3","rawGrab":"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346","subtype":"rsya_guarantee","nonceId":"c7jwPgHPiW2OncJHtCW0ww==","needOwnResult":true,"needSendLayoutCoords":true,"isAjax":false,"extParams":{"reqId":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL"},"initStrategy":"mediaquery","baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_bkehw05-0-1"},"ui":"desktop","service":"web","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","fast":{"name":"adv","subtype":"rsya_guarantee"}}}}},"type":"adv","subtype":"rsya_guarantee"},"2_bkeh4":{"state":{"bkShowCounter":"http://test.test","bkClickCounter":"http://test.test","bkCloseCounter":"http://test.test","bannerId":"72057611699401507:1898956693041579730","distributionFormatId":3000,"buttonYes":"Подробнее","buttonNo":"Закрыть","buttonNoA11yFallback":"Закрыть","buttonYesA11yFallback":"Подробнее","extensionsPrefixChannel":"6102","motley":"grey","location":"right-top","animation":"bounce","product":"internet","popupType":"landing","ageRestriction":"","text":"Поиск с&nbsp;Алисой&nbsp;AI в&nbsp;«белом списке». Ищите как обычно","layout":"renew","curtain":{"type":"landing","product":"internet","link":"http://test.test","service":"search"},"isCross":false,"isCrossOnly":false,"hasShadow":true,"isSeparateAgeRestriction":true,"hideOnPopups":true,"iconSource":"http://test.test","scope":"page","isButtonRed":true,"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_bkehw06-0-1"},"ui":"desktop","service":"web","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL"}}}},"type":"distribution","subtype":"popup-desktop-renew"},"2_bkeh5":{"state":{"linksGroups":[{"type":"geo","links":[{"label":"REDACTED","title":"REDACTED","url":"http://test.test","logNode":{"name":"region"},"target":"_self","a11yLabel":"Ваш регион REDACTED","needRetpath":true}]},{"type":"searchengines","links":[{"label":"Google","url":"http://test.test","logNode":{"name":"link","attrs":{"type":"google"}},"target":"_blank"},{"label":"Bing","url":"http://test.test","logNode":{"name":"link","attrs":{"type":"bing"}},"target":"_blank"}]},{"type":"feedback","links":[{"label":"Сообщить об ошибке","role":"button","logNode":{"name":"feedback","attrs":{"behaviour":{"type":"dynamic"}}}}]},{"type":"settings","links":[{"label":"Настройки","url":"http://test.test","logNode":{"name":"settings"},"target":"_self","needRetpath":true}]},{"type":"morda","links":[{"label":"ya.ru","url":"http://test.test","logNode":{"name":"morda"},"target":"_self"}]},{"type":"company","links":[{"label":"О компании","url":"http://test.test","logNode":{"name":"about"},"target":"_blank"},{"label":"Коммерческие предложения","url":"/search/direct?text=11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346&filters_docs=direct_cm","logNode":{"name":"commercial"},"target":"_blank"},{"label":"Вакансии","url":"http://test.test","logNode":{"name":"vacancy"},"target":"_blank"},{"label":"Лицензия на использование","url":"http://test.test","logNode":{"name":"license"},"target":"_blank"},{"label":"Политика конфиденциальности","url":"http://test.test","logNode":{"name":"confidential"},"target":"_blank"},{"label":"Правила рекомендаций","url":"http://test.test","logNode":{"name":"recommendations"},"target":"_blank"}],"a11yHidden":true}],"reportFeedbackProps":{"feature":"Подвал","title":"Сообщить об ошибке","checkBoxLabels":[]},"isSearchApp":false,"feedbackLabel":"Обратная связь","hasExtralinks":true,"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_bkehw07-0-1"},"ui":"desktop","service":"web","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL"}}}},"type":"serp-footer"},"2_bkeh6":{"state":{"conditionLoadList":{"marketCart":false,"musicPlayer":false,"sonataMusicPlayer":false,"ecomRates":false,"photoViewer":false,"easterEggPhaser":false,"easterEggModal":false,"easterEggPlusGamesModal":false,"futurisFeedbackLoader":true,"futurisFootnoteDetails":true,"videoViewerLoader":true,"audioPlayer":false,"goodplace":false,"easterEggWatermelonModal":false,"easterEggIframeModal":false,"iframeTune":true},"reportFeedbackBaseProps":{"initEmail":"","metaFields":{"userAgent":"Mozilla/5.0 (Windows 11; Windows NT 19; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.7666 Chrome/146 Safari/537.36","userTestids":"1533826,1519498,1536037,1499635,1523085,1532036,1525905,1534929,1522694,1527317,1527654,1522588,1521159,1531137,1530239,1521019,1535456,1504980,1526546,1533128,1531918,1538016,1525231,1486272,1525972,1530700,1526270,1535767,1519858,1534848,1523235,1525089,1531506,1523917,1524406,1522490,1529843,1526923,1536071,1531204,1525763,1532497,885840,1146115,1064473,1532142,1534536,447352,1536322,1503416,27934,1536347,1511609,32914,38812,61912,61909,61908,1504820,263460,255407,1537933,45963,23988,1525135,1535622,1517042,1525946,1528216,1533373,1518412,813434,1530944,19997,1515119,124078,1530379,151171,126322,126331,126340,1524920,1532313,1281084,186144,1029969,13962,287509,338390,1521821,1528619,1519696,1523640,1490998,1504756,1531094,1493787,1530073,941974,1521622,1537241,1482975,1524369,1526150,1538038,1522238,1508298,1476853,1531170,1529214,1488302,1532256,1519296,1533446","queryText":"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","userRegionName":"REDACTED","userRegionId":"43","userCountryName":"REDACTED","yandexuid":"7506504431776110833","uid":"0","isChildAccount":false,"staff":false,"pageUrl":"http://test.test"}},"musicApiLoaderProps":{"limit":29},"sonataMusicPlayerProps":{"limit":29},"iframeTuneLoaderProps":{"initialSrc":"http://test.test","isIOS":false},"easterEggWatermelonModalProps":{"baseDomain":"ya.ru"},"easterEggIframeModalProps":{"baseDomain":"ya.ru"},"isHermione":false,"retina":false,"videoViewerProps":{"nonceId":"c7jwPgHPiW2OncJHtCW0ww==","contextJsSrc":"http://test.test","videoGlobalContext":{"platform":"desktop","isPumpkin":false,"language":"ru","user_time":{"epoch":"1776111144","__is_plain":1,"to_iso":"2026-04-13T23:12:24+0300","tz":"Europe/Moscow"},"isHermione":false,"reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","isEmbedded":false,"shouldShowMainPageButtonInViewer":false,"shouldUseCleanServiceLinks":true,"shouldShowPlayIcon":true,"shouldShowAdultBadge":true,"shouldUseHighresPreview":true,"disableDoc2DocHostLink":false,"disableChannelLink":false,"isDoc2DocScrollFix":true,"isDoc2DocErrorScreenEnabled":true,"shouldStubImages":true,"deviceDetect":{"BrowserName":"Chrome","OSFamily":"Windows"},"reportFeedbackBaseProps":{"initEmail":"","metaFields":{"userAgent":"Mozilla/5.0 (Windows 11; Windows NT 19; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.7666 Chrome/146 Safari/537.36","userTestids":"1533826,1519498,1536037,1499635,1523085,1532036,1525905,1534929,1522694,1527317,1527654,1522588,1521159,1531137,1530239,1521019,1535456,1504980,1526546,1533128,1531918,1538016,1525231,1486272,1525972,1530700,1526270,1535767,1519858,1534848,1523235,1525089,1531506,1523917,1524406,1522490,1529843,1526923,1536071,1531204,1525763,1532497,885840,1146115,1064473,1532142,1534536,447352,1536322,1503416,27934,1536347,1511609,32914,38812,61912,61909,61908,1504820,263460,255407,1537933,45963,23988,1525135,1535622,1517042,1525946,1528216,1533373,1518412,813434,1530944,19997,1515119,124078,1530379,151171,126322,126331,126340,1524920,1532313,1281084,186144,1029969,13962,287509,338390,1521821,1528619,1519696,1523640,1490998,1504756,1531094,1493787,1530073,941974,1521622,1537241,1482975,1524369,1526150,1538038,1522238,1508298,1476853,1531170,1529214,1488302,1532256,1519296,1533446","queryText":"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","userRegionName":"REDACTED","userRegionId":"43","userCountryName":"REDACTED","yandexuid":"7506504431776110833","uid":"0","isChildAccount":false,"staff":false,"pageUrl":"http://test.test"}},"nonce":"c7jwPgHPiW2OncJHtCW0ww==","shouldLoadFullBundleAsync":true,"enableVideoPreviewInHermione":false,"userConnectionRtt":33,"animated":false,"smartDesktopLayout":true,"isVideoTranslationSupported":false,"isSummaryDisabled":false,"isSummaryOnlineEnabled":false,"shouldRenderBroSummaryApiContainer":false,"shouldShowAdvId":false,"shouldUseLegacySerpCounter":false,"rknWarnHosts":["google.ru","google.com","www.google.com","www.google.ru","play.google.com","www.youtube.com","youtube.com","music.youtube.com","chat.google.com","mail.google.com","accounts.google.com","gmail.com","mail.google.com","accounts.google.com","m.youtube.com","www.twitch.tv","twitch.tv","m.twitch.tv","blog.twitch.tv","appeals.twitch.tv","help.twitch.tv","www.wikipedia.org","wikipedia.org","ru.wikipedia.org","ru.m.wikipedia.org","www.zoom.us","zoom.us","explore.zoom.us","m.zoom.us","www.tiktok.com","tiktok.com","m.tiktok.com","www.discord.com","discord.com","www.pinterest.ru","pinterest.ru","pinterest.com","ru.pinterest.com","about.pinterest.com","business.pinterest.com","policy.pinterest.com","www.telegram.org","telegram.org","t.me"],"showDebugRelatedURL":false,"isAdvUnderPlayerTransparent":false,"skinMode":"system","isTouchAdvWithBackdrop":false,"isCommentsEnabled":true,"isCommentsCountOnSnippetsEnabled":true,"isCommentsSmartNonStopEnabled":true,"isMetaCommentsButtonEnabled":true,"isCommentsAuthPopup":false,"isCommentsOnboardingEnabledInTesting":false,"commentsOnboardingTextVariant":null,"isAdvVideoListLikeUnderPlayer":false,"preventAdvHideOnEmpty":false,"detailsRedesignV3Enabled":false,"detailsRedesignEnabled":false,"detailsRedesignV2Enabled":false,"isPlayerChangeCounterEnabled":false,"isAdvUnderPlayerWithSlider":false,"isAdvDisabled":false,"isAdvUnderPlayerCommentsAligned":false,"isSerialNavigatorDisabled":false,"isWatchingProgressInDoc2DocEnabled":true,"postInstreamScreenDuration":2000,"minVideoDurationForInstream":120,"isInstreamEnabledInTesting":false},"initialDataCommon":{"isDynamicClicks":true,"from":"serp","table":"video_tech","skin":"system","query":"11498609515675772114823037067475066956154786784793777692958617715353107611448884240642947241744048790672647486820098338403728534501791662439749498174177776921624577370070904033964301638098891745689685223042723191556059875284540442737058427238447622572317461424845001485064283297093956093951594931025425627357164655334852680573465071839891166334522442605622511006315400595769249916830338944646542474346","isImportantCommonAdv":false,"shouldShowAdvId":false,"isAdultAdv":false,"isAdvStubEnabled":false,"advConfig":{"under-player":{"regular":{"default":"R-I-48058-725","mail":"R-A-13411721-6"},"adult":{"default":"R-I-474674-114","mail":"R-A-13426421-6"}},"under-player-lite":{"regular":{"default":"R-I-48058-728"},"adult":{"default":"R-I-474674-103"}},"under-player-old":{"regular":{"default":"R-I-48058-725","mail":"R-A-13411721-6"},"adult":{"default":"R-I-474674-114","mail":"R-A-13426421-6"}},"video-list":{"regular":{"default":"R-I-48058-708","mail":"R-A-13411721-2"},"adult":{"default":"R-I-474674-101","mail":"R-A-13426421-2"}},"search-list":{"regular":{"default":"R-I-48058-715","mail":"R-A-13411721-3"},"adult":{"default":"R-I-474674-108","mail":"R-A-13426421-3"}},"search-grid-row":{"regular":{"default":"R-I-48058-718","mail":"R-A-13411721-4"},"adult":{"default":"R-I-474674-109","mail":"R-A-13426421-4"}},"search-grid-head":{"regular":{"default":"R-I-2120168-7"}},"search-list-right":{"regular":{"default":"R-I-8843654-1"}},"before-player-old":{"regular":{"default":"R-I-2120168-1"}},"before-player":{"regular":{"default":"R-I-2120168-1"}}},"shouldValidateSandbox":false,"sandboxInitTimeout":15000,"yuid":"7506504431776110833","shouldMuteBaobabAds":false,"filterMode":1,"isInstreamDisabled":true,"advInstreamConfig":{"regular":{"default":{"category":"2","impId":"7","partnerId":"2216089","vmapScenarioId":"119"}},"adult":{"default":{"category":"3","impId":"4","partnerId":"1988486","vmapScenarioId":"119"}}},"feedbackFeatureType":"Просмотрщик видео","isMastheadEnabled":false}},"isLoggedIn":false,"ownerId":"54e41740-83bc-49a5-80d3-203877102ae5","baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_bkehw08-0-1"},"ui":"desktop","service":"web","reqid":"1776111144766606-4857062129697476667-balancer-l7leveler-kubr-yp-sas-52-BAL","fast":{"name":"lazy-load"}}}}},"type":"lazy-load"}}
diff --git a/yandex/testdata/search_results.html b/yandex/testdata/search_results.html new file mode 100644 index 0000000..e2ca4b6 --- /dev/null +++ b/yandex/testdata/search_results.html @@ -0,0 +1 @@ +самый тёмный шоколад — Яндекс: нашлось 9 тыс. результатов
  • Алиса AI находит сайты с нужной информацией и формирует ответ на ее основеУмная строка. Проверка правописания. Для Windows 7 и выше. Блокировка опасных сайтов
  • Промо
    Сайт специализируется на продаже товаров
    Проверяем качество перед сборкой. Доставка бесплатная и без минимальной суммы.
    Рейтинг: 4,2 из 5
    112K отзывов
    на магазин

    Телефон

    Время работы

    круглосуточно

    Метро

    м. Физтех
  • Промо
    Сайт специализируется на продаже товаров
    Натуральныйшоколадс пониженным содержанием сахара и честным составомПроизводитель. Строгие стандарты. 100% чистые ингредиенты
  • Рассказываем, какойсамыйлучший по составу и качествутемныйгорькийшоколадс сахаром или без стоит купить по отзывам эксперта, в проекте Леди Mail.
  • Цена130руб.
    Скидка -35%
    вместо200руб.
    ШоколадтемныйФ.крупской Настоящийшоколад, 85г
    Гипермаркет Лента
    Официальный магазин бренда «Лента, Лента Fresh, HomeClub». Права на товарный знак подтверждены в Яндекс Товарах.
    Промо
    Цена149руб.
    Скидка -50%
    вместо299руб.
    Шоколад «Бабаевский» Люкс
    lavka.yandex.ru
    Цена484руб.
    Скидка -2%
    вместо494руб.
    Темныйшоколадс мятной начинкой в пластинках 200г
    Wildberries
    Цена314руб.
    Скидка -2%
    вместо320руб.
    Картой Ozon
    Цена 314 ₽ действительна при оплате картой Ozon, другими способами — 320 ₽.
    Lindt Excellenceтемныйшоколадс экстрактом перца чили, 100 г, швейцарский, плитка, Швейцария
    OZON
    Промо
    Цена888руб.
    Кедровый трюфель из тёмного шоколада, 120 г
    siberia.eco
    Цена128руб.
    Скидка -35%
    вместо197руб.
    ШоколадСлава, Красный Октябрь 75 гр.
    alenka.ru
    Цена0,50руб.
    Belfast 3609/9024ТемныйшоколадDarkChocolate
    шёлковая-нить.рф
    Цена159руб.
    Скидка -6%
    вместо169руб.
    ШоколадRitter SportТемный74% какао с насыщенным вкусом из Перу, 100г
    online.metro-cc.ru
    Цена223руб.
    Скидка -2%
    вместо228руб.
    Шоколадгорький 72% без сахара, 100 г
    Wildberries
    Цена431руб.
    Скидка -3%
    вместо444руб.
    КартойПэй
    Цена 431 ₽ действительна при оплате картой Яндекс Пэй, другими способами — 444 ₽.
    ZainiТемныйшоколад70% какао "Women of cocoa", Италия, 75г
    Яндекс Маркет
    Цена120руб.
    ШоколадФабрика им. Крупской Особыйтемный, 85г
    5ka.ru
    Цена453руб.
    Скидка -11%
    вместо509руб.
    Шоколадгорький Bucheron 72%
    lavka.yandex.ru
  • Что вам больше всего нравится в поиске Яндекса?
  • Сайт специализируется на продаже товаров
    Выбрать жесамыйлучшийтёмныйшоколадвам предстоит самостоятельно: заказывайте сладости на Яндекс Маркете и дегустируйте в поисках «тогосамоговкуса».
    Рейтинг: 4,6 из 5
    196K отзывов
    на магазин
    «Доставка всегда вовремя...»
  • Цена225руб.
    Скидка -1%
    вместо227руб.
    Картой Ozon
    Цена 225 ₽ действительна при оплате картой Ozon, другими способами — 227 ₽.
    ШоколадПобеда вкуса горький без сахара, 72% какао, 100г, Россия, натуральный, российский, плитка
    OZON
    Цена79руб.
    "VISTA-ARTISTA" "Gallery" VGWP Карандаш акварельный художественный заточенный 720ТемныйшоколадDarkchocolateкупить за 79,00 ₽ в интернет-магазине Леонардо
    leonardo.ru
    Цена704руб.
    Скидка -23%
    вместо915руб.
    Шоколадгорький 70,5% Callebaut 70-30-38 0,4 кг
    shocko.ru
    Цена704руб.
    Скидка -23%
    вместо915руб.
    Шоколадтемный54,5% Callebaut 811 0,4 кг
    shocko.ru
    Цена60руб.
    Скидка -35%
    вместо93руб.
    Батончик Бабаевский с помадно-сливочной начинкой, 50 гр.
    alenka.ru
    Цена733руб.
    Тёмныйшоколадс кедровым орехом, 100 г
    siberia.eco
    Цена526руб.
    Endangered SpeciesChocolate,темныйшоколад, карамель и морская соль, 60% какао, 85 г 3 унции
    DeliHerb
    Из-за границы
    Цена300руб.
    Скидка -9%
    вместо330руб.
    ШоколадтемныйKONFESTAChocolatePresent, 180г
    Гипермаркет Лента
    Официальный магазин бренда «Лента, Лента Fresh, HomeClub». Права на товарный знак подтверждены в Яндекс Товарах.
    Цена40руб.
    Скидка -52%
    вместо84руб.
    Батончик BUCHERON стемнойначинкой, 40г
    Гипермаркет Лента
    Официальный магазин бренда «Лента, Лента Fresh, HomeClub». Права на товарный знак подтверждены в Яндекс Товарах.
    Цена945руб.
    Скидка -17%
    вместо1133руб.
    Endangered SpeciesChocolate,тёмныйшоколадс миндалём и морской солью, 72% какао, 85 г 3 унции
    iHerb в России
    Цена359руб.
    Шоколадтёмный54,5%, №811, Callebaut, Бельгия, 100 г
    dvemorkovki.ru
    Цена146руб.
    Скидка -31%
    вместо211руб.
    ШоколадтемныйPREMIUM CLUB с вишней и миндалем, 85г
    Гипермаркет Лента
    Официальный магазин бренда «Лента, Лента Fresh, HomeClub». Права на товарный знак подтверждены в Яндекс Товарах.
  • Сайт специализируется на продаже товаров
    Шоколадбывает белым, молочным,тёмными горьким. ... «Шоколадпо вкусу ближе ктёмному, во вкусе присутствует лёгкая горчинка и выраженный вкус какао-бобов».
    Рейтинг: 4,4 из 5
    377K отзывов
    на магазин
    «Постоянно пользуюсь доставкой на дом...»
  • Вы покупаете плитку дорогоготемногошоколада, чтобы взбодриться, получить дозу магния...
  • — Принято считать, чтотемныйшоколаддолжен быть горьким, но это не совсем так.
  • Топ-10: Рейтинг лучшеготемногошоколадапо версии редакции. ... Лучшийтемныйшоколад— это не обязательносамыйдорогой илисамыйгорький.
  • Сайт организации, сведения о котором внесены в список адресов web-сайтов кредитных организаций
    В статье рассказывается
    • В чем особенности горькогошоколада
    • Самыйвкусный горькийшоколад: топ-10
    Запах и вкус —самыечто ни на есть горько-шоколадные, их ни с чем не перепутаешь.
  • SchogettenDarkChocolate. ... Коммунаркатёмныйс пюре из клюквы – молочныйшоколадс бархатистой текстурой и насыщенным сливочным вкусом.
  • Горькийшоколадчасто добавляют в десерты, например в брауни , бланманже илишоколадныймусс.
  • ТемныйшоколадRitter Sport Миндаль и апельсин. ...ТемныйшоколадЧеховский Кондитер Альянс Чеховская коллекция ВишняТемный.
  • Алиса AI находит сайты с нужной информацией и формирует ответ на ее основеУмная строка. Проверка правописания. Для Windows 7 и выше. Блокировка опасных сайтов
  • Сериал «Шоколад» на Кинопоиске. Все серии. Смотрите 30 дней за 1₽!Дома и в дороге. На любом устройстве. Тысячи фильмов и сериалов
  • Промо
    Сайт специализируется на продаже товаров
    Большой выбор. Низкие цены. Доставка по России
    Рейтинг: 4,5 из 5
    6,1K отзывов
    на магазин
  • Промо
    Сайт специализируется на продаже товаров
    Большой ассортимент продуктов, фруктов и овощей с доставкой от 15 минут

    Телефон

    Время работы

    ежедневно 7:00-23:00

    Метро

    м. Охотный Ряд
  • Собственное производствошоколадас логотипом, по ГОСТу и без заменителей. Звоните!Современное оборудование. Быстрое обслуживание. Индивидуальный дизайн
{"2_ai0q":{"state":{"form":{"action":"/search","logo":{"href":"http://test.test","size":44},"searchLabel":"Найти","hiddenInputs":[{"name":"lr","value":43}],"inputMaxLength":4000,"searchThemes":true,"searchThemesProps":{"showOnZeroSuggest":true,"themes":[{"id":"realty","title":"Квартиры","href":"http://test.test","icons":{"light":"http://test.test","dark":"http://test.test"}},{"href":"http://test.test","title":"Услуги","icons":{"dark":"http://test.test","light":"http://test.test"},"id":"services"},{"id":"finance","title":"Финансы","href":"http://test.test","icons":{"light":"http://test.test","dark":"http://test.test"}},{"id":"ecom","title":"Товары","href":"http://test.test","icons":{"light":"http://test.test","dark":"http://test.test"}},{"id":"medicine","title":"Медицина","href":"http://test.test","icons":{"light":"http://test.test","dark":"http://test.test"}}]}},"actions":{"marketCart":{"url":"http://test.test","goodsCount":0,"ariaLabel":"Маркет"},"mic":{"speechKitSettings":{"apiKey":"effd5a3f-fd42-4a18-83a1-61766a6d0924","appId":"serp.desktop","uuid":"00000000000005835913351776110833","uniproxyUrl":"wss:http://test.test","lang":"ru-RU","isAliceASR":true}},"distribution":{"type":"link_bro","variant":"link-bro-design2025","scope":"search","props":{"bkShowCounter":"http://test.test","bkClickCounter":"http://test.test","bkCloseCounter":"http://test.test","bannerId":"72057611171590192:1899014803827015525","title":"Установите Яндекс Браузер","subtitle":"Яндекс Браузер","alt":"Яндекс Браузер","img":"http://test.test","distributionFormatId":3197,"product":"browser","scope":"search","layout":"neuro","a11yShown":true}},"advancedSearch":{"checked":false,"ariaLabel":"Расширенный поиск"},"moreButtonProps":{"ariaLabel":"Ещё"},"favorites":{"ariaLabel":"Избранное","iframeUrl":"http://test.test","isHiddenByRegion":false},"weatherInformer":{"iconUrl":"http://test.test","temperature":6,"url":"http://test.test","showSkeleton":true},"ecomOrders":{"url":"http://test.test","ariaLabel":"Заказы"},"cbir":{"name":"cbir","label":"Поиск по картинке","infoUrl":"http://test.test","isMacOS":false,"isLoggedIn":false}},"user":{"loggedIn":false,"ariaLabel":"Меню","plus":false,"birthdayHat":false,"child":false,"dialogProps":{"host":"ya.ru","platform":"desktop","queryParams":{"utm_source":"search","preset":"oceania","exp_flags":"feedback,skin"},"project":"serp","lang":"ru","retpath":"https%3A%2F%2Fya.ru%2Fsearch%3Ftext%3D%25D1%2581%25D0%25B0%25D0%25BC%25D1%258B%25D0%25B9%2B%25D1%2582%25D1%2591%25D0%25BC%25D0%25BD%25D1%258B%25D0%25B9%2B%25D1%2588%25D0%25BE%25D0%25BA%25D0%25BE%25D0%25BB%25D0%25B0%25D0%25B4%26lr%3D43%26msid%3D1776111363781103-9499106644078761240-balancer-l7leveler-kubr-yp-sas-112-BAL%26search_source%3Dyaru_desktop_common%26suggest_reqid%3D583591335177611083313640883246218%26ncrnd%3D76244","tld":"ru"},"loginUrl":"http://test.test","loginText":"Войти"},"navigation":{"tabs":[{"id":"www","label":"Поиск","url":"http://test.test","params":{"source":"tabbar"},"target":""},{"id":"alice_chat","label":"Алиса AI","url":"http://test.test","params":{"reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","utm_source":"yandex","utm_campaign":"serp_alicetab_chat","utm_medium":"interface","alice_deeplink":"[$aliceDeeplink]","source_query":"[$query]","theme":"serp"},"target":"_self"},{"id":"products","label":"Товары","url":"http://test.test","params":{"text":"[$query]","noreask":"[$noreask]","products_mode":"1","from":"tabbar","serp-reload-from":"tab"},"isDynamicTab":true,"promoted":true,"target":""},{"id":"images","label":"Картинки","url":"http://test.test","params":{"text":"[$query]","site":"[$site]","noreask":"[$noreask]","nomisspell":"[$nomisspell]","parent-reqid":"[$reqid]","from":"tabbar"}},{"id":"video","label":"Видео","url":"http://test.test","params":{"text":"[$query]","site":"[$site]","noreask":"[$noreask]","parent-reqid":"[$reqid]","from":"tabbar"}},{"id":"maps","label":"Карты","url":"http://test.test","params":{"text":"[$query]","source":"serp_navig"}},{"id":"finance","label":"Финансы","url":"http://test.test","params":{"lr":"[$lr]","from":"tabbar"}},{"id":"realty","label":"Квартиры","url":"http://test.test","params":{"lr":"[$lr]","from":"tabbar"}},{"id":"translate","label":"Переводчик","url":"http://test.test","params":{"text":"[$query]","from":"tabbar"}},{"id":"all","label":"Все","url":"http://test.test","params":{"text":"[$query]","from":"tabbar"}}],"loading":false,"selectedTabId":"www","alwaysVisibleTabs":2,"skeletonsCount":8,"hasSearchNeuroTab":false,"isEmbeddedPromoAdv":false},"context":{"query":"самый тёмный шоколад","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","lr":"43","testMode":true,"aliceDeeplink":"{\"text\":\"самый тёмный шоколад\"}","isAliceProUser":false,"isAnyYaBro":false,"counters":{"type":"b","data":{"$header":"0_28vcz000","logo":"0_28vcz001","advanced-search":"0_28vcz002","login":"0_28vcz004","usermenu":"0_28vcz005","market-cart":"0_28vcz007","voice-search":"0_28vcz008","more-button":"0_28vcz009","cbir":"0_28vcz00a","clear":"0_28vcz00b","submit":"0_28vcz00c","alice":"0_28vcz00d","favorites":"0_28vcz00e","weather-informer":"0_28vcz00f","ecom-orders":"0_28vcz00g","$navigation":"0_28vcz00h","item":"0_28vcz010","tab-www":"0_28vcz00j","tab-alice_chat":"0_28vcz00l","tab-products":"0_28vcz00n","tab-images":"0_28vcz00p","tab-video":"0_28vcz00r","tab-maps":"0_28vcz00t","tab-finance":"0_28vcz00v","tab-realty":"0_28vcz00x","tab-translate":"0_28vcz00z","tab-all":"0_28vcz011"}}},"loggedIn":false,"mix":{"outerContainer":[]},"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"0_28vcw01-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","fast":{"name":"header-desktop"}}}}},"type":"header-desktop"},"2_28vc0":{"state":{"goodsHeaderProps":{"favicon":{"index":12,"pageNumber":0,"size":"m","domain":"yandex.ru"},"title":{"titleText":"Популярные товары по запросу «самый тёмный шоколад»","url":"http://test.test","target":"_self"},"extralinks":{"items":[{"variant":"reportFeedback","reportFeedback":{"feature":"Товарная врезка","customMetaFields":[{"name":"offerIds","value":"8PiSPDFyHdr3mqki48lBLA,,JcSyE6KilLnlFzdCuiODyA,31Q6aFsr-MigRMMFMRoXRg,,x8fkz5QWbA2uBB0RLFq6ew,w8E9o44quc42C0RxkfekrQ,aIz_0mlRHWeJS6qIBeD__g,hOFeDz3kTeqfgQkn-1FzyA,NmWH8XZpXluNVmN81bdPOw,uZLcK8F6MQ2JEIx1QVx9iQ,TJaqv0Xe1dQPV3rD8SgC2w"}],"title":"Сообщить об ошибке","checkBoxLabels":[{"value":"Один или несколько товаров не соответствуют запросу"},{"value":"В информации о товарах есть ошибки"},{"value":"Один из магазинов — недобросовестный продавец"},{"value":"Присутствует контрафактный, поддельный или бывший в употреблении товар"},{"value":"Другое"}],"textareas":["Опишите ситуацию как можно подробнее"]}},{"variant":"connect","url":"http://test.test"}],"hidden":true}},"products":[{"offerId":"8PiSPDFyHdr3mqki48lBLA","shopId":1080043675,"wareMd5":"8PiSPDFyHdr3mqki48lBLA","hatterId":"12024425217285756780:7539433996444997842","showUid":"17761113666021714654800006","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] \u0007[темный\u0007] Ф.крупской Настоящий \u0007[шоколад\u0007], 85г","titleTextPlain":"Шоколад темный Ф.крупской Настоящий шоколад, 85г","priceProps":{"value":130,"currency":"RUR"},"oldPriceProps":{"value":200,"currency":"RUR"},"labelDiscountProps":{"value":"35"},"previewData":{"images":[{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"Курьер","variant":"courier"},{"label":"Из магазина","variant":"store"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"Гипермаркет Лента","greenUrlFavicon":{"index":1,"pageNumber":0,"size":"xs","rounded":true,"domain":"lenta.com"},"brandRules":[{"brandName":"Лента, Лента Fresh, HomeClub","ruleId":"8136871333685333418"}],"isProductsMode":false,"favorites":{"image_url":"http://test.test","title":"Шоколад темный Ф.крупской Настоящий шоколад, 85г","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}},{"adId":"1904830890342249496","pos":1,"className":"","ariaLabel":"2. Перейти к товару. Шоколад «Бабаевский» Люкс","logNode":{"attrs":{"type":"adv","externalId":{"entity":"banner","id":"1904830890342249496"},"event_hash":"1405344385307726939","hit_log_id":"1899014799070153089","url":"http://test.test","direct_url":"http://test.test","title":"Шоколад «Бабаевский» Люкс","price":149,"oldPrice":299,"currency":"RUR"}},"thumbProps":{"rounded":"l","loading":"lazy","images":[{"image":"http://test.test","imageHd":"http://test.test"}]},"linkProps":{"role":"link","target":"_blank","url":"http://test.test","logNode":{"name":"linkOverlay"},"isAdvUrl":true,"noRedirectUrl":"http://test.test","isSendBeaconDisabled":true},"title":"Шоколад «Бабаевский» Люкс","titleProps":{"maxLines":3},"priceProps":{"value":149,"currency":"RUR","footnote":false,"precision":2},"priceFirst":true,"oldPriceProps":{"value":299,"currency":"RUR","precision":2,"size":"xs"},"labelDiscountProps":{"value":50},"withLabelDiscount":true,"oldPriceInline":false,"offerAdv":true,"offer":"lavka.yandex.ru","offerFaviconProps":{"index":2,"pageNumber":0,"size":"xs","rounded":true,"domain":"lavka.yandex.ru"},"extralinksProps":{"headerProps":{"title":"lavka.yandex.ru","faviconProps":{"index":2,"pageNumber":0,"size":"m","domain":"lavka.yandex.ru"}},"type":"normal","items":[{"variant":"reportFeedback","text":"Сообщить об ошибке","reportFeedback":{"title":"Что не так с результатом?","feature":"Товарная галерея","customMetaFields":[{"name":"snippetUrl","value":"http://test.test"},{"name":"countUrl","value":"http://test.test"},{"name":"hitLogId","value":"1899014799070153089"}],"checkBoxLabels":[{"value":"Не подходит по запросу","id":"10"},{"value":"Мешает видеть результаты","id":"12"},{"value":"Спам или мошенничество","id":"11"},{"value":"Порнография","id":"Порнография"},{"value":"Другое","id":"Другое"}]},"shouldCloseOnItemClick":true}],"horizontal":true,"enableDebugExtralinks":false},"advVisiblityCounter":"http://test.test","isPrerender":false,"contentAdv":true,"promoLabel":{"text":"Промо","pos":"top"},"itemType":"promo_pg"},{"offerId":"JcSyE6KilLnlFzdCuiODyA","modelId":"475712002","skuId":"100676556734","shopId":1864997,"wareMd5":"JcSyE6KilLnlFzdCuiODyA","hatterId":"15869766128819889775:1533932343465036003","showUid":"17761113666011661183200001","url":"http://test.test","titleText":"\u0007[Темный\u0007] \u0007[шоколад\u0007] с мятной начинкой в пластинках 200г","titleTextPlain":"Темный шоколад с мятной начинкой в пластинках 200г","priceProps":{"value":484,"currency":"RUR"},"oldPriceProps":{"value":494,"currency":"RUR"},"labelDiscountProps":{"value":"2"},"previewData":{"images":[{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"В ПВЗ","variant":"pickupPoint"},{"label":"Курьер","variant":"courier"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"Wildberries","greenUrlFavicon":{"index":3,"pageNumber":0,"size":"xs","rounded":true,"domain":"www.wildberries.ru"},"ratingValue":4.8,"isProductsMode":false,"favorites":{"image_url":"http://test.test","title":"Темный шоколад с мятной начинкой в пластинках 200г","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}},{"offerId":"31Q6aFsr-MigRMMFMRoXRg","modelId":"158327190","skuId":"100410024979","shopId":14556803,"wareMd5":"31Q6aFsr-MigRMMFMRoXRg","hatterId":"3759183709486782744:5341507539628289725","showUid":"17761113666011673024500002","url":"http://test.test","titleText":"Lindt Excellence \u0007[темный\u0007] \u0007[шоколад\u0007] с экстрактом перца чили, 100 г, швейцарский, плитка, Швейцария","titleTextPlain":"Lindt Excellence темный шоколад с экстрактом перца чили, 100 г, швейцарский, плитка, Швейцария","priceProps":{"value":314,"currency":"RUR"},"oldPriceProps":{"value":320,"currency":"RUR"},"labelDiscountProps":{"value":"2"},"previewData":{"images":[{"original":"http://test.test"},{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"В ПВЗ","variant":"pickupPoint"},{"label":"Курьер","variant":"courier"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"images":["http://test.test","http://test.test"],"greenUrlText":"OZON","greenUrlFavicon":{"index":4,"pageNumber":0,"size":"xs","rounded":true,"domain":"www.ozon.ru"},"ratingValue":4.8,"isProductsMode":false,"payByCondition":{"type":"ozon","tooltipText":"Цена 314 ₽ действительна при оплате картой Ozon, другими способами — 320 ₽.","infoIconLogNode":{"name":"pay-by-condition-tooltip"},"fintechLogNode":{"name":"pay-by-condition","attrs":{"type":"ozon"}}},"favorites":{"image_url":"http://test.test","title":"Lindt Excellence темный шоколад с экстрактом перца чили, 100 г, швейцарский, плитка, Швейцария","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}},{"adId":"1901904146084521590","pos":4,"className":"","ariaLabel":"5. Перейти к товару. Кедровый трюфель из тёмного шоколада, 120 г","logNode":{"attrs":{"type":"adv","externalId":{"entity":"banner","id":"1901904146084521590"},"event_hash":"17709933769242023439","hit_log_id":"1899014799070153089","url":"http://test.test","direct_url":"http://test.test","title":"Кедровый трюфель из тёмного шоколада, 120 г","price":888,"currency":"RUR"}},"thumbProps":{"rounded":"l","loading":"lazy","images":[{"image":"http://test.test","imageHd":"http://test.test"}]},"linkProps":{"role":"link","target":"_blank","url":"http://test.test","logNode":{"name":"linkOverlay"},"isAdvUrl":true,"noRedirectUrl":"http://test.test","isSendBeaconDisabled":true},"title":"Кедровый трюфель из тёмного шоколада, 120 г","titleProps":{"maxLines":3},"priceProps":{"value":888,"currency":"RUR","footnote":false,"precision":2},"priceFirst":true,"withLabelDiscount":true,"oldPriceInline":false,"offerAdv":true,"offer":"siberia.eco","offerFaviconProps":{"index":5,"pageNumber":0,"size":"xs","rounded":true,"domain":"siberia.eco"},"extralinksProps":{"headerProps":{"title":"siberia.eco","faviconProps":{"index":5,"pageNumber":0,"size":"m","domain":"siberia.eco"}},"type":"normal","items":[{"variant":"reportFeedback","text":"Сообщить об ошибке","reportFeedback":{"title":"Что не так с результатом?","feature":"Товарная галерея","customMetaFields":[{"name":"snippetUrl","value":"http://test.test"},{"name":"countUrl","value":"http://test.test"},{"name":"hitLogId","value":"1899014799070153089"}],"checkBoxLabels":[{"value":"Не подходит по запросу","id":"10"},{"value":"Мешает видеть результаты","id":"12"},{"value":"Спам или мошенничество","id":"11"},{"value":"Порнография","id":"Порнография"},{"value":"Другое","id":"Другое"}]},"shouldCloseOnItemClick":true}],"horizontal":true,"enableDebugExtralinks":false},"advVisiblityCounter":"http://test.test","isPrerender":false,"contentAdv":true,"promoLabel":{"text":"Промо","pos":"top"},"itemType":"promo_pg"},{"offerId":"x8fkz5QWbA2uBB0RLFq6ew","modelId":"163585612","skuId":"100477632747","shopId":43236072,"wareMd5":"x8fkz5QWbA2uBB0RLFq6ew","hatterId":"5852194441302819192:14195898958338823029","showUid":"17761113666021697796200004","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] Слава, Красный Октябрь 75 гр.","titleTextPlain":"Шоколад Слава, Красный Октябрь 75 гр.","priceProps":{"value":128,"currency":"RUR"},"oldPriceProps":{"value":197,"currency":"RUR"},"labelDiscountProps":{"value":"35"},"previewData":{"images":[{"original":"http://test.test"}]},"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"alenka.ru","greenUrlFavicon":{"index":6,"pageNumber":0,"size":"xs","rounded":true,"domain":"www.alenka.ru"},"ratingValue":4.8,"isProductsMode":false,"favorites":{"image_url":"http://test.test","title":"Шоколад Слава, Красный Октябрь 75 гр.","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}},{"offerId":"w8E9o44quc42C0RxkfekrQ","shopId":1073908462,"wareMd5":"w8E9o44quc42C0RxkfekrQ","hatterId":"1529812428338318099:16394228209351033170","showUid":"17761113666021968525400031","url":"http://test.test","titleText":"Belfast 3609/9024 \u0007[Темный\u0007] \u0007[шоколад\u0007] \u0007[Dark\u0007] \u0007[Chocolate\u0007]","titleTextPlain":"Belfast 3609/9024 Темный шоколад Dark Chocolate","priceProps":{"value":0.5,"currency":"RUR"},"previewData":{"images":[{"original":"http://test.test"}]},"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"шёлковая-нить.рф","greenUrlFavicon":{"index":7,"pageNumber":0,"size":"xs","rounded":true,"domain":"xn----7sbf0agfse5bzczc5au.xn--p1ai"},"isProductsMode":false,"favorites":{"image_url":"http://test.test","title":"Belfast 3609/9024 Темный шоколад (Dark Chocolate)","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}},{"offerId":"aIz_0mlRHWeJS6qIBeD__g","modelId":"546408440","skuId":"100763518641","shopId":3305460,"wareMd5":"aIz_0mlRHWeJS6qIBeD__g","hatterId":"14628597334282221615:8158555282613798168","showUid":"17761113666021779909500012","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] Ritter Sport \u0007[Темный\u0007] 74% какао с насыщенным вкусом из Перу, 100г","titleTextPlain":"Шоколад Ritter Sport Темный 74% какао с насыщенным вкусом из Перу, 100г","priceProps":{"value":159,"currency":"RUR"},"oldPriceProps":{"value":169,"currency":"RUR"},"labelDiscountProps":{"value":"6"},"previewData":{"images":[{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"Курьер","variant":"courier"},{"label":"Из магазина","variant":"store"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"images":["http://test.test","http://test.test","http://test.test"],"greenUrlText":"online.metro-cc.ru","greenUrlFavicon":{"index":8,"pageNumber":0,"size":"xs","rounded":true,"domain":"online.metro-cc.ru"},"ratingValue":4.8,"isProductsMode":false,"favorites":{"image_url":"http://test.test","title":"Шоколад Ritter Sport Темный 74% какао с насыщенным вкусом из Перу, 100г","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}},{"offerId":"hOFeDz3kTeqfgQkn-1FzyA","modelId":"163585140","skuId":"100644724464","shopId":1864997,"wareMd5":"hOFeDz3kTeqfgQkn-1FzyA","hatterId":"10535163070347437502:3066559115104830935","showUid":"17761113666021709615000005","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] горький 72% без сахара, 100 г","titleTextPlain":"Шоколад горький 72% без сахара, 100 г","priceProps":{"value":223,"currency":"RUR"},"oldPriceProps":{"value":228,"currency":"RUR"},"labelDiscountProps":{"value":"2"},"previewData":{"images":[{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"В ПВЗ","variant":"pickupPoint"},{"label":"Курьер","variant":"courier"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"Wildberries","greenUrlFavicon":{"index":3,"pageNumber":0,"size":"xs","rounded":true,"domain":"www.wildberries.ru"},"ratingValue":4.9,"isProductsMode":false,"favorites":{"image_url":"http://test.test","title":"Шоколад горький 72% без сахара, 100 г","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}},{"offerId":"NmWH8XZpXluNVmN81bdPOw","modelId":"1807944776","skuId":"101902057780","shopId":1078892682,"wareMd5":"NmWH8XZpXluNVmN81bdPOw","hatterId":"9916662768120549719:1604120208971164789","showUid":"17761113666021803319000015","url":"http://test.test","titleText":"Zaini \u0007[Темный\u0007] \u0007[шоколад\u0007] 70% какао \"Women of cocoa\", Италия, 75г","titleTextPlain":"Zaini Темный шоколад 70% какао \"Women of cocoa\", Италия, 75г","priceProps":{"value":431,"currency":"RUR"},"oldPriceProps":{"value":444,"currency":"RUR"},"labelDiscountProps":{"value":"3"},"previewData":{"images":[{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"В ПВЗ","variant":"pickupPoint"},{"label":"Курьер","variant":"courier"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"images":["http://test.test","http://test.test","http://test.test","http://test.test","http://test.test"],"greenUrlText":"Яндекс Маркет","greenUrlFavicon":{"index":9,"pageNumber":0,"size":"xs","rounded":true,"domain":"market.yandex.ru"},"ratingValue":4.8,"isProductsMode":false,"payByCondition":{"type":"yandexPay","tooltipText":"Цена 431 ₽ действительна при оплате картой Яндекс Пэй, другими способами — 444 ₽.","infoIconLogNode":{"name":"pay-by-condition-tooltip"},"fintechLogNode":{"name":"pay-by-condition","attrs":{"type":"yandexPay"}}},"favorites":{"image_url":"http://test.test","title":"Zaini Темный шоколад 70% какао \"Women of cocoa\", Италия, 75г","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}},{"offerId":"uZLcK8F6MQ2JEIx1QVx9iQ","shopId":1073905505,"wareMd5":"uZLcK8F6MQ2JEIx1QVx9iQ","hatterId":"691355710089379417:7364036333690594151","showUid":"17761113666021846614900019","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] Фабрика им. Крупской Особый \u0007[темный\u0007], 85г","titleTextPlain":"Шоколад Фабрика им. Крупской Особый темный, 85г","priceProps":{"value":120,"currency":"RUR"},"previewData":{"images":[{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"Курьер","variant":"courier"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"images":["http://test.test","http://test.test","http://test.test","http://test.test","http://test.test"],"greenUrlText":"5ka.ru","greenUrlFavicon":{"index":10,"pageNumber":0,"size":"xs","rounded":true,"domain":"5ka.ru"},"isProductsMode":false,"favorites":{"image_url":"http://test.test","title":"Шоколад Фабрика им. Крупской Особый темный, 85г","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}},{"offerId":"TJaqv0Xe1dQPV3rD8SgC2w","modelId":"163583083","skuId":"100447720811","shopId":1075150369,"wareMd5":"TJaqv0Xe1dQPV3rD8SgC2w","hatterId":"14339765711933792238:2257449003636426967","showUid":"17761113666021767413200011","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] горький Bucheron 72%","titleTextPlain":"Шоколад горький Bucheron 72%","priceProps":{"value":453,"currency":"RUR"},"oldPriceProps":{"value":509,"currency":"RUR"},"labelDiscountProps":{"value":"11"},"previewData":{"images":[{"original":"http://test.test"},{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"Экспресс","variant":"express"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"images":["http://test.test","http://test.test"],"greenUrlText":"lavka.yandex.ru","greenUrlFavicon":{"index":11,"pageNumber":0,"size":"xs","rounded":true,"domain":"lavka.yandex.ru"},"ratingValue":4.8,"isProductsMode":false,"favorites":{"image_url":"http://test.test","title":"Шоколад горький Bucheron 72%","doc_id":"http://test.test","is_favorite":false,"theme":"products","doc_type":"goods","csrf_token":"","region":43}}],"sharedProductsProps":{"priceA11yLabel":"Цена","target":"_self","imgLogFrom":"products-tiles"},"rs":"eJx9VcmuqlgUnb53U4PKHbzUT5g6fTNEkctFEbDXCVFpRMFeUP6j_rfOwdekBq9iTExw7b322msv0D9_On-9fRN-NvJN62lHF1yc9xkRebtvOPDtm7MZPbusl-X9Q27VUeeeeebTeP9KOOUQAYDQHxAAxhmljGOiIRgGbGVdLy03S4eua7nD43yYvn-FVGDEoQQNhKgvIpJLDXmIZF_TYLY20L3dBsO-dWZxpSAMU0EZfHUhnDNVgXBNuRJdeSTkfN8Q1AHDxz6J95dAF1t91iEo8qE9i50RO3-2YzMMVX9KGAGCkFd_VYpCwQjUkK1nxWaN9-P4nKTB_tCCVq2nfPWH3yGMEI6IquKgt2-DYmaL-fI0z--DaTEQcB35XvX-BgXgkmiqGqOnBZRzATTn-7K_6QmLuQFyup8PGEwfMms4j53VuQTzGEaBP8UXU4zSDvohAAZKuEYAVRYBARvOnSyew3LbHUf4wy3LbexOQFn9njN4-xb6HDz8gee1DXk6n1MZ8UeWKs4QYg4VkKM3gjFmknHBNOPk9DDSMW-vZoLNYRpdWKdsGfrJ7Noly6PR9srn1Eb0UcXJSFlGKdOhubNsZ3PLPk7xla3Pzuci0l0kVGSoYPK7MlAyJBnWGNYfRb6F290jgEodtJgZ177GEIyUggzyBkOwFJQQgrUAhUv2Ay-bbfxeP5TEMuv76KoEEKo0VaUbzTCVSHD1kVqAyIvuF38O81Voz8uFcM8FbxmqDUWcMlVdKgE4Y4JRTpFuYtR1JxTA7oD1DkQjKpPTJFHOkBhKpNiIpokSj0iIGNWzFF2W933WGXeCK-CJyMZ5PQlUE0CB8iAntMEIiAFHiqxWc52AwxlNba_2rKPTW24C52ymmrI9iFruZQS8eJBC53JzxuEi0tWQoiCIsoOiTLGEirLAupa3MwdTeh7cu63QjEe-sFZ52OysS2PLbdWoFWCYncTCrY08bvw3g_vt0MhPXAYJ3u3uy0O-nRpaS8E4VEf3Q0sMEaZAj_mBN0t77OxNu-jFdrU8XNrH5MeYFCGMf46pxRR6GMucHGvPsT_9QRkG2K3G8802eP_C1MIkx-i1ZCiUsAhI3SVK05ZxjabDiSXjcukxc9Sb_18XNcyU7bKkjT86q4rdjD1d7XunQfr9MpolvwKIQYaUKTVkfbBlxEByeAwWpljm0foYTX5mFpLoV2ZhQJrTuCwGvOLMum-TZEfMw4MdLnbaZCaaVaPoVK2X3aEXWOjTvLfWgS4GJOFESdgUU_Gnw4JpYRIC_VG3iDZuAILquRcPLrLq_YsyotqxaLIECcEJouQlzL7j7vMtyHd9dkqptwhRbbSrXy7D4j8uQ87fKpkLOFtKz15E8-6KHMyCnh1Di8kFpBzoOP-qb5RRAIVuEgtR8NPKt-DSLV1n1l3dxFqfJWAYUoJfuYSIsoh6BcjmxtpZCszdurg92aLHrcWkRbt2-v6Fcsyx-l-D4FBZVkiVvkrJ9KPjBoeR9K52ufYKFFvL2mnMf_HxIsqHa7u3iGI8Cr3F6hIoWZTrCQUcvLpL9VO9FpqIDajhPJJDCurICuedA7SeyzzQtXK63XRmiZwk7SuCm4HbAp-fengiiQQSMaZvHwm1YAm5RuAwGKbWoYgft3XPvH2Udhzw4LdxqfS6ILLCaclnVhrOC0BDt3xYeik6t1XewWb1yt_KCoRjrJdi4Y64DZ-X4767uxerwz7Ijv4LI6VQ16CXwiEHXKe4GvEQ1dGztb5_FHnNI9feucHpUukn_nmiYu92t1EWg3oBSJzXItDEytR02_1ntZvSqjhOx7D1XAfG7xf5Ly46EgY,","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","url":"http://test.test","target":"_self","logNode":{"attrs":{"productsTilesOrientation":"vertical"}},"productCardContext":{"reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","tld":"ru","baseUrl":"http://test.test","expFlags":{"PRODUCTS_default_offer_discount":2,"PRODUCTS_market_checkout":1,"PRODUCTS_kit_checkout":1,"PRODUCTS_sidebar_checkout_default_offer":"1","PRODUCTS_sidebar_checkout_faq":"1","imgwiz_viewer_in_product_card":1,"imgwiz_viewer_mono_offers":1,"imgwiz_ecom_viewer_yarec_rim_wheretobuy_label":2,"PRODUCTS_shopitem_redesign_v2":"shift","PRODUCTS_pay_by_condition":"OZON_CARD_YANDEX_PAY","PRODUCTS_product_card_recommendations":1},"experiments":["1530458","1529950","1521195","1519498","1535101","1499636","1527726","1532036","1522258","1525906","66188","1332807","1534928","1522694","1529366","1527317","1527654","1441067","1522590","1521159","1531147","1212601","1521018","1535455","1504976","1513580","1525036","1533470","1531365","1528640","43961","1517430","1530695","1526269","1526139","1529506","1534433","1535766","1529411","1519859","1529243","1535082","1523262","1525192","1531506","1523917","1282205","1524800","1522490","1529845","1222389","1526925","1536071","1531204","1525783","1535100","1533553","1538163","885839","1519964","1215708","1520401","1537212","1536315","1503416","3659","1536722","1511609","61908","1504820","1507138","298","1470140","1534486","1357003","1525948","961010","1536472","1401741","805351","1530945","1530645","1515119","1533381","972817","66180","85054","1530377","151171","1524920","1532313","1281084","186144","1029968","13963","287509","338390","1521821","1528622","1530213","1490998","1504756","1525056","785124","1493787","1520433","1530074","1529012","1525940","1535555","1482975","1511510","1530817","1514068","1522239","1508296","1531174","1529214","1488304","1513726","1535263","1528423","912284"],"isProductsMode":false,"query":"самый тёмный шоколад","source":"serp_incut","region":{"selected":{"id":"43","name":"REDACTED","tid":"ru"}},"user":{"isInternalStaff":false,"blackboxUser":{"name":{}},"encryptedIcookie":"qxgZ9fkAZkNC+10OEBfTzPxKw/YQSMrx3RKz07Sqh+y9RIDzcrC4dxbNda45cfnF2I1VekqxZ6WfplewbCmK8fRhULc=","icookie":"5835913351776110833"},"metrikaCounterId":731962,"futurisExpFlags":{"futurisAliceChatReplaceHost":true,"isShowAllHints":false,"isFootnoteDetails":true,"isFootnoteRedesignDivided":true,"futurisMultiqueryFlag":true,"futurisUnfoldTeaserInAliceTab":false,"advSnippetMaxCount":null,"feedbackSinglePanel":false,"futurisGiveAliceContext":"","futurisUseAliceInput":false,"futurisAdvSearchLinks":false,"futurisAdvLogLimitSnippet":false,"futurisAliceChatTabBlankApp":false,"futurisMathDisableErrorStub":false,"futurisAliceViewVibrate":false,"futurisNewDisclaimer":true,"futurisMaskAnswer":false}},"tileView":"vertical","moreButtonProps":{"text":"Показать все","url":"http://test.test","target":"_self"},"withProductPopover":true,"userRegionId":43,"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw02-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","fast":{"name":"ecommerce_constr","subtype":"products_tiles"}}}}},"type":"ecommerce_constr","subtype":"products_tiles"},"2_28vc1":{"state":{"surveyProps":{"surveyId":"UcA2sBHarAjQ3eccmTCkK8","questions":[{"rotation":true,"options":[{"label":"Помогает находить информацию","id":14},{"label":"Быстро работает","id":4},{"label":"Не перегружен рекламой","id":13},{"label":"Другое","id":20},{"label":"Все нравится","id":22},{"label":"Нравится дизайн","id":5}],"type":"choice","label":"Что вам больше всего нравится в поиске Яндекса?","id":2}],"gratitudeText":"Спасибо, что помогаете улучшать Поиск!","isGratitudeFlag":false,"type":"multiusurveys","bkCounters":{"show":"http://test.test"}},"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw03-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","fast":{"name":"multiusurveys"}}}}},"type":"multiusurveys"},"2_28vc2":{"state":{"goodsHeaderProps":{"favicon":{"index":12,"pageNumber":0,"size":"m","domain":"yandex.ru"},"title":{"titleText":"Популярные товары по запросу «самый тёмный шоколад»","url":"http://test.test","target":"_self"},"extralinks":{"items":[{"variant":"reportFeedback","reportFeedback":{"feature":"Товарная врезка","customMetaFields":[{"name":"offerIds","value":"CieX1vhETd3GMvvheMU0vw,_P70xPNOOBA9pqqg9d7xig,fpxAgT7BaW86X1gdr6Cv-A,WsE4ZoABOvyVH25xwefSLA,C5lJZBiXFHoV3s6bqJIYdg,6LSdPF3BEo01MQ22YWAsLg,mM4kNOiWcPKL_94FDzuSsw,dOdurPX1la_HXvY8Mqm7-A,AzzC_80HC0bj0dS59fpUfA,mE6lLP6CTCQs07f8iTlzUQ,bf0nq2VHOzOFoJKZcQJqDg,HNd-MrS0OeNg1JrtJT_YdQ"}],"title":"Сообщить об ошибке","checkBoxLabels":[{"value":"Один или несколько товаров не соответствуют запросу"},{"value":"В информации о товарах есть ошибки"},{"value":"Один из магазинов — недобросовестный продавец"},{"value":"Присутствует контрафактный, поддельный или бывший в употреблении товар"},{"value":"Другое"}],"textareas":["Опишите ситуацию как можно подробнее"]}},{"variant":"connect","url":"http://test.test"}],"hidden":true}},"products":[{"offerId":"CieX1vhETd3GMvvheMU0vw","modelId":"163585140","skuId":"100644724464","shopId":14556803,"wareMd5":"CieX1vhETd3GMvvheMU0vw","hatterId":"6398847459881278853:5341507539628289725","showUid":"17761113666011687345800003","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] Победа вкуса горький без сахара, 72% какао, 100г, Россия, натуральный, российский, плитка","titleTextPlain":"Шоколад Победа вкуса горький без сахара, 72% какао, 100г, Россия, натуральный, российский, плитка","priceProps":{"value":225,"currency":"RUR"},"oldPriceProps":{"value":227,"currency":"RUR"},"labelDiscountProps":{"value":"1"},"previewData":{"images":[{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"В ПВЗ","variant":"pickupPoint"},{"label":"Курьер","variant":"courier"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"images":["http://test.test","http://test.test","http://test.test","http://test.test","http://test.test"],"greenUrlText":"OZON","greenUrlFavicon":{"index":4,"pageNumber":0,"size":"xs","rounded":true,"domain":"www.ozon.ru"},"ratingValue":4.9,"isProductsMode":false,"payByCondition":{"type":"ozon","tooltipText":"Цена 225 ₽ действительна при оплате картой Ozon, другими способами — 227 ₽.","infoIconLogNode":{"name":"pay-by-condition-tooltip"},"fintechLogNode":{"name":"pay-by-condition","attrs":{"type":"ozon"}}},"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Шоколад Победа вкуса горький без сахара, 72% какао, 100г, Россия, натуральный, российский, плитка","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"_P70xPNOOBA9pqqg9d7xig","modelId":"1113711637","skuId":"4333696786","shopId":1075214780,"wareMd5":"_P70xPNOOBA9pqqg9d7xig","hatterId":"757559868210385013:945591887652496839","showUid":"17761113666021754084700010","url":"http://test.test","titleText":"\"VISTA-ARTISTA\" \"Gallery\" VGWP Карандаш акварельный художественный заточенный 720 \u0007[Темный\u0007] \u0007[шоколад\u0007] \u0007[Dark\u0007] \u0007[chocolate\u0007] купить за 79,00 ₽ в интернет-магазине Леонардо","titleTextPlain":"\"VISTA-ARTISTA\" \"Gallery\" VGWP Карандаш акварельный художественный заточенный 720 Темный шоколад Dark chocolate купить за 79,00 ₽ в интернет-магазине Леонардо","priceProps":{"value":79,"currency":"RUR"},"barometerProps":{"lower":360,"decision":"below-market","details":{"price":79,"region":11119},"upper":410},"previewData":{"images":[{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"В ПВЗ СДЭК и др.","variant":"pickupPoint"},{"label":"Экспресс","variant":"express"},{"label":"Из магазина","variant":"store"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"leonardo.ru","greenUrlFavicon":{"index":14,"pageNumber":0,"size":"xs","rounded":true,"domain":"leonardo.ru"},"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"\"VISTA-ARTISTA\" \"Gallery\" VGWP Карандаш акварельный художественный заточенный 720 Темный шоколад (Dark chocolate) купить за 79,00 ₽ в интернет-магазине Леонардо","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"fpxAgT7BaW86X1gdr6Cv-A","shopId":36021401,"wareMd5":"fpxAgT7BaW86X1gdr6Cv-A","hatterId":"5993902200093059648:12058400713518611833","showUid":"17761113666022054315400040","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] горький 70,5% Callebaut 70-30-38 0,4 кг","titleTextPlain":"Шоколад горький 70,5% Callebaut 70-30-38 0,4 кг","priceProps":{"value":704,"currency":"RUR"},"oldPriceProps":{"value":915,"currency":"RUR"},"labelDiscountProps":{"value":"23"},"previewData":{"images":[{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"В ПВЗ СДЭК и др.","variant":"pickupPoint"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"shocko.ru","greenUrlFavicon":{"index":15,"pageNumber":0,"size":"xs","rounded":true,"domain":"shocko.ru"},"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Шоколад горький 70,5% Callebaut 70-30-38 (0,4 кг)","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"WsE4ZoABOvyVH25xwefSLA","shopId":36021401,"wareMd5":"WsE4ZoABOvyVH25xwefSLA","hatterId":"17713882443761179033:12058400713518611833","showUid":"17761113666022107079100045","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] \u0007[темный\u0007] 54,5% Callebaut 811 0,4 кг","titleTextPlain":"Шоколад темный 54,5% Callebaut 811 0,4 кг","priceProps":{"value":704,"currency":"RUR"},"oldPriceProps":{"value":915,"currency":"RUR"},"labelDiscountProps":{"value":"23"},"previewData":{"images":[{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"В ПВЗ СДЭК и др.","variant":"pickupPoint"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"shocko.ru","greenUrlFavicon":{"index":15,"pageNumber":0,"size":"xs","rounded":true,"domain":"shocko.ru"},"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Шоколад темный 54,5% Callebaut 811 (0,4 кг)","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"C5lJZBiXFHoV3s6bqJIYdg","modelId":"1914475869","skuId":"101901962963","shopId":43236072,"wareMd5":"C5lJZBiXFHoV3s6bqJIYdg","hatterId":"10433702154059577441:14195898958338823029","showUid":"17761113666021734454200008","url":"http://test.test","titleText":"Батончик Бабаевский с помадно-сливочной начинкой, 50 гр.","titleTextPlain":"Батончик Бабаевский с помадно-сливочной начинкой, 50 гр.","priceProps":{"value":60,"currency":"RUR"},"oldPriceProps":{"value":93,"currency":"RUR"},"labelDiscountProps":{"value":"35"},"previewData":{"images":[{"original":"http://test.test"}]},"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"alenka.ru","greenUrlFavicon":{"index":6,"pageNumber":0,"size":"xs","rounded":true,"domain":"www.alenka.ru"},"ratingValue":5,"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Батончик Бабаевский с помадно-сливочной начинкой, 50 гр.","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"6LSdPF3BEo01MQ22YWAsLg","modelId":"1432020617","skuId":"101439854443","shopId":3330422,"wareMd5":"6LSdPF3BEo01MQ22YWAsLg","hatterId":"14340939584428621181:7160457895839079149","showUid":"17761113666022093833200044","url":"http://test.test","titleText":"\u0007[Тёмный\u0007] \u0007[шоколад\u0007] с кедровым орехом, 100 г","titleTextPlain":"Тёмный шоколад с кедровым орехом, 100 г","priceProps":{"value":733,"currency":"RUR"},"previewData":{"images":[{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"},{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"Курьер СДЭК","variant":"courier"},{"label":"В ПВЗ СДЭК","variant":"pickupPoint"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"images":["http://test.test","http://test.test","http://test.test","http://test.test","http://test.test"],"greenUrlText":"siberia.eco","greenUrlFavicon":{"index":16,"pageNumber":0,"size":"xs","rounded":true,"domain":"siberia.eco"},"ratingValue":4.9,"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Тёмный шоколад с кедровым орехом, 100 г","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"mM4kNOiWcPKL_94FDzuSsw","modelId":"819059623","skuId":"103592878789","shopId":60933026,"wareMd5":"mM4kNOiWcPKL_94FDzuSsw","hatterId":"7098384901198940183:6011180877179915816","showUid":"17761113666021785067800013","url":"http://test.test","titleText":"Endangered Species \u0007[Chocolate\u0007], \u0007[темный\u0007] \u0007[шоколад\u0007], карамель и морская соль, 60% какао, 85 г 3 унции","titleTextPlain":"Endangered Species Chocolate, темный шоколад, карамель и морская соль, 60% какао, 85 г 3 унции","priceProps":{"value":526,"currency":"RUR"},"previewData":{"images":[{"original":"http://test.test"},{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"В ПВЗ СДЭК и др.","variant":"pickupPoint"}],"hasCrossborder":true,"itemType":"product","logNode":{"attrs":{"hasCrossborder":true}},"images":["http://test.test","http://test.test"],"greenUrlText":"DeliHerb","greenUrlFavicon":{"index":17,"pageNumber":0,"size":"xs","rounded":true,"domain":"deliherb.ru"},"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Endangered Species Chocolate, темный шоколад, карамель и морская соль, 60% какао, 85 г (3 унции)","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"dOdurPX1la_HXvY8Mqm7-A","modelId":"1527564399","skuId":"4766865752","shopId":1080043675,"wareMd5":"dOdurPX1la_HXvY8Mqm7-A","hatterId":"3871558067170122132:7539433996444997842","showUid":"17761113666021854419100020","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] \u0007[темный\u0007] KONFESTA \u0007[Chocolate\u0007] Present, 180г","titleTextPlain":"Шоколад темный KONFESTA Chocolate Present, 180г","priceProps":{"value":300,"currency":"RUR"},"oldPriceProps":{"value":330,"currency":"RUR"},"labelDiscountProps":{"value":"9"},"previewData":{"images":[{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"Курьер","variant":"courier"},{"label":"Из магазина","variant":"store"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"Гипермаркет Лента","greenUrlFavicon":{"index":1,"pageNumber":0,"size":"xs","rounded":true,"domain":"lenta.com"},"brandRules":[{"brandName":"Лента, Лента Fresh, HomeClub","ruleId":"8136871333685333418"}],"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Шоколад темный KONFESTA Chocolate Present, 180г","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"AzzC_80HC0bj0dS59fpUfA","modelId":"931923988","skuId":"103711491265","shopId":1080043675,"wareMd5":"AzzC_80HC0bj0dS59fpUfA","hatterId":"11893163963797656329:7539433996444997842","showUid":"17761113666021816349500016","url":"http://test.test","titleText":"Батончик BUCHERON с \u0007[темной\u0007] начинкой, 40г","titleTextPlain":"Батончик BUCHERON с темной начинкой, 40г","priceProps":{"value":40,"currency":"RUR"},"oldPriceProps":{"value":84,"currency":"RUR"},"labelDiscountProps":{"value":"52"},"previewData":{"images":[{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"Курьер","variant":"courier"},{"label":"Из магазина","variant":"store"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"Гипермаркет Лента","greenUrlFavicon":{"index":1,"pageNumber":0,"size":"xs","rounded":true,"domain":"lenta.com"},"brandRules":[{"brandName":"Лента, Лента Fresh, HomeClub","ruleId":"8136871333685333418"}],"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Батончик BUCHERON с темной начинкой, 40г","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"mE6lLP6CTCQs07f8iTlzUQ","modelId":"1050546745","skuId":"103813072819","shopId":135356523,"wareMd5":"mE6lLP6CTCQs07f8iTlzUQ","hatterId":"17754953727459330690:16660182534691530130","showUid":"17761113666021909113300025","url":"http://test.test","titleText":"Endangered Species \u0007[Chocolate\u0007], \u0007[тёмный\u0007] \u0007[шоколад\u0007] с миндалём и морской солью, 72% какао, 85 г 3 унции","titleTextPlain":"Endangered Species Chocolate, тёмный шоколад с миндалём и морской солью, 72% какао, 85 г 3 унции","priceProps":{"value":945,"currency":"RUR"},"oldPriceProps":{"value":1133,"currency":"RUR"},"labelDiscountProps":{"value":"17"},"previewData":{"images":[{"original":"http://test.test"},{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"Курьер","variant":"courier"},{"label":"В ПВЗ СДЭК и др.","variant":"pickupPoint"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"images":["http://test.test","http://test.test"],"greenUrlText":"iHerb в России","greenUrlFavicon":{"index":18,"pageNumber":0,"size":"xs","rounded":true,"domain":"iherb-REDACTED.org"},"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Endangered Species Chocolate, тёмный шоколад с миндалём и морской солью, 72% какао, 85 г (3 унции)","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"bf0nq2VHOzOFoJKZcQJqDg","shopId":1075005545,"wareMd5":"bf0nq2VHOzOFoJKZcQJqDg","hatterId":"17563317956615216180:4876918483525024521","showUid":"17761113666022127748900047","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] \u0007[тёмный\u0007] 54,5%, №811, Callebaut, Бельгия, 100 г","titleTextPlain":"Шоколад тёмный 54,5%, №811, Callebaut, Бельгия, 100 г","priceProps":{"value":359,"currency":"RUR"},"previewData":{"images":[{"original":"http://test.test"}]},"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"dvemorkovki.ru","greenUrlFavicon":{"index":19,"pageNumber":0,"size":"xs","rounded":true,"domain":"dvemorkovki.ru"},"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Шоколад тёмный 54,5%, №811, Callebaut, Бельгия, 100 г","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}},{"offerId":"HNd-MrS0OeNg1JrtJT_YdQ","modelId":"1293184208","skuId":"4539165783","shopId":1080043675,"wareMd5":"HNd-MrS0OeNg1JrtJT_YdQ","hatterId":"11407859203587054602:7539433996444997842","showUid":"17761113666021861237300021","url":"http://test.test","titleText":"\u0007[Шоколад\u0007] \u0007[темный\u0007] PREMIUM CLUB с вишней и миндалем, 85г","titleTextPlain":"Шоколад темный PREMIUM CLUB с вишней и миндалем, 85г","priceProps":{"value":146,"currency":"RUR"},"oldPriceProps":{"value":211,"currency":"RUR"},"labelDiscountProps":{"value":"31"},"previewData":{"images":[{"original":"http://test.test"}]},"merchantDeliveryProps":[{"label":"Курьер","variant":"courier"},{"label":"Из магазина","variant":"store"}],"hasCrossborder":false,"itemType":"product","logNode":{"attrs":{"hasCrossborder":false}},"image":"http://test.test","imageHd":"http://test.test","greenUrlText":"Гипермаркет Лента","greenUrlFavicon":{"index":1,"pageNumber":0,"size":"xs","rounded":true,"domain":"lenta.com"},"brandRules":[{"brandName":"Лента, Лента Fresh, HomeClub","ruleId":"8136871333685333418"}],"isProductsMode":false,"favorites":{"image_url":"http://test.test","doc_id":"http://test.test","title":"Шоколад темный PREMIUM CLUB с вишней и миндалем, 85г","theme":"products","is_favorite":false,"doc_type":"goods","csrf_token":"","region":43}}],"sharedProductsProps":{"priceA11yLabel":"Цена","target":"_self","imgLogFrom":"products-tiles"},"rs":"eJx9VcmuqlgUnb53U4PKHbzUT5g6fTNEkctFEbDXCVFpRMFeUP6j_rfOwdekBq9iTExw7b322msv0D9_On-9fRN-NvJN62lHF1yc9xkRebtvOPDtm7MZPbusl-X9Q27VUeeeeebTeP9KOOUQAYDQHxAAxhmljGOiIRgGbGVdLy03S4eua7nD43yYvn-FVGDEoQQNhKgvIpJLDXmIZF_TYLY20L3dBsO-dWZxpSAMU0EZfHUhnDNVgXBNuRJdeSTkfN8Q1AHDxz6J95dAF1t91iEo8qE9i50RO3-2YzMMVX9KGAGCkFd_VYpCwQjUkK1nxWaN9-P4nKTB_tCCVq2nfPWH3yGMEI6IquKgt2-DYmaL-fI0z--DaTEQcB35XvX-BgXgkmiqGqOnBZRzATTn-7K_6QmLuQFyup8PGEwfMms4j53VuQTzGEaBP8UXU4zSDvohAAZKuEYAVRYBARvOnSyew3LbHUf4wy3LbexOQFn9njN4-xb6HDz8gee1DXk6n1MZ8UeWKs4QYg4VkKM3gjFmknHBNOPk9DDSMW-vZoLNYRpdWKdsGfrJ7Noly6PR9srn1Eb0UcXJSFlGKdOhubNsZ3PLPk7xla3Pzuci0l0kVGSoYPK7MlAyJBnWGNYfRb6F290jgEodtJgZ177GEIyUggzyBkOwFJQQgrUAhUv2Ay-bbfxeP5TEMuv76KoEEKo0VaUbzTCVSHD1kVqAyIvuF38O81Voz8uFcM8FbxmqDUWcMlVdKgE4Y4JRTpFuYtR1JxTA7oD1DkQjKpPTJFHOkBhKpNiIpokSj0iIGNWzFF2W933WGXeCK-CJyMZ5PQlUE0CB8iAntMEIiAFHiqxWc52AwxlNba_2rKPTW24C52ymmrI9iFruZQS8eJBC53JzxuEi0tWQoiCIsoOiTLGEirLAupa3MwdTeh7cu63QjEe-sFZ52OysS2PLbdWoFWCYncTCrY08bvw3g_vt0MhPXAYJ3u3uy0O-nRpaS8E4VEf3Q0sMEaZAj_mBN0t77OxNu-jFdrU8XNrH5MeYFCGMf46pxRR6GMucHGvPsT_9QRkG2K3G8802eP_C1MIkx-i1ZCiUsAhI3SVK05ZxjabDiSXjcukxc9Sb_18XNcyU7bKkjT86q4rdjD1d7XunQfr9MpolvwKIQYaUKTVkfbBlxEByeAwWpljm0foYTX5mFpLoV2ZhQJrTuCwGvOLMum-TZEfMw4MdLnbaZCaaVaPoVK2X3aEXWOjTvLfWgS4GJOFESdgUU_Gnw4JpYRIC_VG3iDZuAILquRcPLrLq_YsyotqxaLIECcEJouQlzL7j7vMtyHd9dkqptwhRbbSrXy7D4j8uQ87fKpkLOFtKz15E8-6KHMyCnh1Di8kFpBzoOP-qb5RRAIVuEgtR8NPKt-DSLV1n1l3dxFqfJWAYUoJfuYSIsoh6BcjmxtpZCszdurg92aLHrcWkRbt2-v6Fcsyx-l-D4FBZVkiVvkrJ9KPjBoeR9K52ufYKFFvL2mnMf_HxIsqHa7u3iGI8Cr3F6hIoWZTrCQUcvLpL9VO9FpqIDajhPJJDCurICuedA7SeyzzQtXK63XRmiZwk7SuCm4HbAp-fengiiQQSMaZvHwm1YAm5RuAwGKbWoYgft3XPvH2Udhzw4LdxqfS6ILLCaclnVhrOC0BDt3xYeik6t1XewWb1yt_KCoRjrJdi4Y64DZ-X4767uxerwz7Ijv4LI6VQ16CXwiEHXKe4GvEQ1dGztb5_FHnNI9feucHpUukn_nmiYu92t1EWg3oBSJzXItDEytR02_1ntZvSqjhOx7D1XAfG7xf5Ly46EgY,","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","url":"http://test.test","target":"_self","logNode":{"attrs":{"productsTilesOrientation":"vertical"}},"productCardContext":{"reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","tld":"ru","baseUrl":"http://test.test","expFlags":{"PRODUCTS_default_offer_discount":2,"PRODUCTS_market_checkout":1,"PRODUCTS_kit_checkout":1,"PRODUCTS_sidebar_checkout_default_offer":"1","PRODUCTS_sidebar_checkout_faq":"1","imgwiz_viewer_in_product_card":1,"imgwiz_viewer_mono_offers":1,"imgwiz_ecom_viewer_yarec_rim_wheretobuy_label":2,"PRODUCTS_shopitem_redesign_v2":"shift","PRODUCTS_pay_by_condition":"OZON_CARD_YANDEX_PAY","PRODUCTS_product_card_recommendations":1},"experiments":["1530458","1529950","1521195","1519498","1535101","1499636","1527726","1532036","1522258","1525906","66188","1332807","1534928","1522694","1529366","1527317","1527654","1441067","1522590","1521159","1531147","1212601","1521018","1535455","1504976","1513580","1525036","1533470","1531365","1528640","43961","1517430","1530695","1526269","1526139","1529506","1534433","1535766","1529411","1519859","1529243","1535082","1523262","1525192","1531506","1523917","1282205","1524800","1522490","1529845","1222389","1526925","1536071","1531204","1525783","1535100","1533553","1538163","885839","1519964","1215708","1520401","1537212","1536315","1503416","3659","1536722","1511609","61908","1504820","1507138","298","1470140","1534486","1357003","1525948","961010","1536472","1401741","805351","1530945","1530645","1515119","1533381","972817","66180","85054","1530377","151171","1524920","1532313","1281084","186144","1029968","13963","287509","338390","1521821","1528622","1530213","1490998","1504756","1525056","785124","1493787","1520433","1530074","1529012","1525940","1535555","1482975","1511510","1530817","1514068","1522239","1508296","1531174","1529214","1488304","1513726","1535263","1528423","912284"],"isProductsMode":false,"query":"самый тёмный шоколад","source":"serp_incut","region":{"selected":{"id":"43","name":"REDACTED","tid":"ru"}},"user":{"isInternalStaff":false,"blackboxUser":{"name":{}},"encryptedIcookie":"qxgZ9fkAZkNC+10OEBfTzPxKw/YQSMrx3RKz07Sqh+y9RIDzcrC4dxbNda45cfnF2I1VekqxZ6WfplewbCmK8fRhULc=","icookie":"5835913351776110833"},"metrikaCounterId":731962,"futurisExpFlags":{"futurisAliceChatReplaceHost":true,"isShowAllHints":false,"isFootnoteDetails":true,"isFootnoteRedesignDivided":true,"futurisMultiqueryFlag":true,"futurisUnfoldTeaserInAliceTab":false,"advSnippetMaxCount":null,"feedbackSinglePanel":false,"futurisGiveAliceContext":"","futurisUseAliceInput":false,"futurisAdvSearchLinks":false,"futurisAdvLogLimitSnippet":false,"futurisAliceChatTabBlankApp":false,"futurisMathDisableErrorStub":false,"futurisAliceViewVibrate":false,"futurisNewDisclaimer":true,"futurisMaskAnswer":false}},"tileView":"vertical","moreButtonProps":{"text":"Показать все","url":"http://test.test","target":"_self"},"withProductPopover":true,"popoverSubscriberId":"ProductsTiles5","userRegionId":43,"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw04-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","fast":{"name":"products_additional_constr","subtype":"products_additional_offers_unisearch_center_incut"}}}}},"type":"products_additional_constr","subtype":"products_additional_offers_unisearch_center_incut"},"2_28vc3":{"state":{"className":"Organic-ShopInfo","reviewsProps":{"rating":"4,6","tooltip":{"text":"Рейтинг магазина в Яндексе"},"reviews_count":196128,"reviews_text":"196 128 отзывов","ecomRates":{"organizationType":"Маркетплейс","type":"ugc_ecom_shops","rate":4.6,"rateText":"4,6","rateCount":643365,"reviewCount":196128,"reviewCountText":"196 128 отзывов","domain":"market.yandex.ru","title":"Яндекс Маркет","icon":"http://test.test","barCharts":[75.5,11.9,4.9,1.9,5.8],"ugc":{"appId":"serp-organic","objectId":"/site/bWFya2V0LnlhbmRleC5ydQ==","quote":{"avatar":"42215/e5dqT3FkgQ6OmoQNX1fxLftCdE-1","avatarAbc":"a","isSentenceEnd":false,"isSentenceStart":true,"reviewId":"nTWA10cYfp-JSuzFBI2MOrgHOATV74-","aspectId":"1003","text":"Доставка всегда вовремя"}}},"withLongShopText":true,"withLongMarketplaceText":true,"withThumb":false},"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw07-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","organic":1}}}},"type":"organic"},"2_28vc4":{"state":{"className":"Organic-ShopInfo","reviewsProps":{"rating":"4,4","tooltip":{"text":"Рейтинг магазина в Яндексе"},"reviews_count":377152,"reviews_text":"377 152 отзыва","ecomRates":{"organizationType":"Маркетплейс","type":"ugc_ecom_shops","rate":4.4,"rateText":"4,4","rateCount":729608,"reviewCount":377152,"reviewCountText":"377 152 отзыва","domain":"ozon.ru","title":"OZON","icon":"http://test.test","barCharts":[74.9,9.2,3.6,2,10.2],"ugc":{"appId":"serp-organic","objectId":"/site/b3pvbi5ydQ==","quote":{"avatar":"45566/3HUXo8xzKQUyRaaJwC27ls0CkuM-1","avatarAbc":"В","isSentenceEnd":false,"isSentenceStart":true,"reviewId":"v4FlbLoeBrGrOTsJJiVI9Cq72u77Gll","aspectId":"1003","text":"Постоянно пользуюсь доставкой на дом"}}},"withLongShopText":true,"withLongMarketplaceText":true,"withThumb":false},"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw08-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","organic":1}}}},"type":"organic"},"2_28vc5":{"state":{"className":"Organic-ShopInfo","reviewsProps":{"rating":"4,5","tooltip":{"text":"Рейтинг магазина в Яндексе"},"reviews_count":6142,"reviews_text":"6 142 отзыва","ecomRates":{"organizationType":"Магазин одежды","type":"ugc_ecom_shops","rate":4.5,"rateText":"4,5","rateCount":8918,"reviewCount":6142,"reviewCountText":"6 142 отзыва","domain":"stockmann.ru","title":"Стокманн","icon":"http://test.test","barCharts":[68.2,12.3,7.6,3,8.9],"ugc":{"appId":"serp-organic","objectId":"/site/c3RvY2ttYW5uLnJ1"}},"withLongShopText":true,"withLongMarketplaceText":true,"withThumb":false},"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw0i-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","organic":1}}}},"type":"organic"},"2_28vc6":{"state":{"advAjax":{"subtype":"premium_ajax","bids":"72057611518283434,72057611514039708,72057611722607921","testing":false},"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw0l-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","fast":{"name":"adv","subtype":"return"}}}}},"type":"adv","subtype":"return"},"2_28vc7":{"state":{"bkShowCounter":"http://test.test","bkClickCounter":"http://test.test","bkCloseCounter":"http://test.test","bannerId":"72057611125636934:1899014803827015525","product":"set","distributionFormatId":3348,"buttonYes":"Продолжить","buttonNo":"Нет, спасибо","buttonNoA11yFallback":"Нет, спасибо","buttonYesA11yFallback":"Продолжить","extensionsPrefixChannel":"0702","ageRestriction":"","title":"Сделать Яндекс основным поиском?","text":"Настройте быстрый доступ к&nbsp;поиску и&nbsp;сервисам Яндекса, установив расширение.","layout":"system_center_out-cross-beside","curtain":{"type":"landing","product":"set","link":"http://test.test","service":"search"},"closeType":"beside","iconSource":"http://test.test","scope":"page","baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw0n-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL"}}}},"type":"distribution","subtype":"splashscreen-system"},"2_28vc8":{"state":{"linksGroups":[{"type":"geo","links":[{"label":"REDACTED","title":"REDACTED","url":"http://test.test","logNode":{"name":"region"},"target":"_self","a11yLabel":"Ваш регион REDACTED","needRetpath":true}]},{"type":"searchengines","links":[{"label":"Google","url":"http://test.test","logNode":{"name":"link","attrs":{"type":"google"}},"target":"_blank"},{"label":"Bing","url":"http://test.test","logNode":{"name":"link","attrs":{"type":"bing"}},"target":"_blank"}]},{"type":"feedback","links":[{"label":"Сообщить об ошибке","role":"button","logNode":{"name":"feedback","attrs":{"behaviour":{"type":"dynamic"}}}}]},{"type":"settings","links":[{"label":"Настройки","url":"http://test.test","logNode":{"name":"settings"},"target":"_self","needRetpath":true}]},{"type":"morda","links":[{"label":"ya.ru","url":"http://test.test","logNode":{"name":"morda"},"target":"_self"}]},{"type":"company","links":[{"label":"О компании","url":"http://test.test","logNode":{"name":"about"},"target":"_blank"},{"label":"Коммерческие предложения","url":"/search/direct?text=%D1%81%D0%B0%D0%BC%D1%8B%D0%B9%20%D1%82%D1%91%D0%BC%D0%BD%D1%8B%D0%B9%20%D1%88%D0%BE%D0%BA%D0%BE%D0%BB%D0%B0%D0%B4&filters_docs=direct_cm","logNode":{"name":"commercial"},"target":"_blank"},{"label":"Вакансии","url":"http://test.test","logNode":{"name":"vacancy"},"target":"_blank"},{"label":"Лицензия на использование","url":"http://test.test","logNode":{"name":"license"},"target":"_blank"},{"label":"Политика конфиденциальности","url":"http://test.test","logNode":{"name":"confidential"},"target":"_blank"},{"label":"Правила рекомендаций","url":"http://test.test","logNode":{"name":"recommendations"},"target":"_blank"}],"a11yHidden":true}],"reportFeedbackProps":{"feature":"Подвал","title":"Сообщить об ошибке","checkBoxLabels":[]},"isSearchApp":false,"feedbackLabel":"Обратная связь","hasExtralinks":true,"baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw0o-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL"}}}},"type":"serp-footer"},"2_28vc9":{"state":{"conditionLoadList":{"marketCart":false,"musicPlayer":false,"sonataMusicPlayer":false,"ecomRates":true,"photoViewer":false,"easterEggPhaser":false,"easterEggModal":false,"easterEggPlusGamesModal":false,"futurisFeedbackLoader":false,"futurisFootnoteDetails":false,"videoViewerLoader":false,"audioPlayer":false,"goodplace":false,"easterEggWatermelonModal":false,"easterEggIframeModal":false,"iframeTune":true},"reportFeedbackBaseProps":{"initEmail":"","metaFields":{"userAgent":"Mozilla/5.0 (Windows 11; Windows NT 19; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.7666 Chrome/146 Safari/537.36","userTestids":"1530458,1529950,1521195,1519498,1535101,1499636,1527726,1532036,1522258,1525906,66188,1332807,1534928,1522694,1529366,1527317,1527654,1441067,1522590,1521159,1531147,1212601,1521018,1535455,1504976,1513580,1525036,1533470,1531365,1528640,43961,1517430,1530695,1526269,1526139,1529506,1534433,1535766,1529411,1519859,1529243,1535082,1523262,1525192,1531506,1523917,1282205,1524800,1522490,1529845,1222389,1526925,1536071,1531204,1525783,1535100,1533553,1538163,885839,1519964,1215708,1520401,1537212,1536315,1503416,3659,1536722,1511609,61908,1504820,1507138,298,1470140,1534486,1357003,1525948,961010,1536472,1401741,805351,1530945,1530645,1515119,1533381,972817,66180,85054,1530377,151171,1524920,1532313,1281084,186144,1029968,13963,287509,338390,1521821,1528622,1530213,1490998,1504756,1525056,785124,1493787,1520433,1530074,1529012,1525940,1535555,1482975,1511510,1530817,1514068,1522239,1508296,1531174,1529214,1488304,1513726,1535263,1528423,912284","queryText":"самый тёмный шоколад","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","userRegionName":"REDACTED","userRegionId":"43","userCountryName":"REDACTED","yandexuid":"5835913351776110833","uid":"0","isChildAccount":false,"staff":false,"searchSlicesV2":["drawer_search_slice_v2_ecom"],"pageUrl":"http://test.test"}},"musicApiLoaderProps":{"limit":29},"sonataMusicPlayerProps":{"limit":29},"iframeTuneLoaderProps":{"initialSrc":"http://test.test","isIOS":false},"easterEggWatermelonModalProps":{"baseDomain":"ya.ru"},"easterEggIframeModalProps":{"baseDomain":"ya.ru"},"isHermione":false,"retina":false,"isLoggedIn":false,"ownerId":"54e41740-83bc-49a5-80d3-203877102ae5","baobab":{"parentNode":{"context":{"genInfo":{"prefix":"2_28vcw0p-0-1"},"ui":"desktop","service":"web","reqid":"1776111366387781-11043999907561652753-balancer-l7leveler-kubr-yp-sas-112-BAL","fast":{"name":"lazy-load"}}}}},"type":"lazy-load"}}