1045
Чат создан чтобы делиться опытом о Scrapy/Python и другими парсинг технологиями. Вежливость и уважение к другим участникам группы. Троллинг не приветствуется. FAQ: https://github.com/bulatbulat48/ru-scrapy-python Работа: t.me/scrapy_jobs
Ошибочка в form2request - откатился на FormRequest
https://github.com/scrapy/form2request/issues/12
Тот раз спрашивал тут кто знает норм библу обхода CF и просто имитацию барузера. Нашел такую пропатчиный веб драйвер. Вдруг кому то понадобится. Мои потребности вроде закрывает. https://github.com/CloakHQ/cloakbrowser
Читать полностью…
Ну смотри, давай дальше разгонять. Я прекрасно понимаю что fingerprinting переезжает в QUIC/TLS ClientHello ) Идея в том, что в этом случае разница между Linux\Windows сигнатурами менее ощутима (если это не так, то поправьте меня). И я не собираюсь подделывать сетевой стек, я думал использовать сетевой стек Хрома. Основная задача уменьшить лики при утечке платформы.
То что Cloudflare и крупные WAF смотрят не только L3/L4 я понимаю прекрасно, поэтому я в начале написал что этот вопрос выношу за скобки, что бы решать проблему поэтапно.первый контакт может идти по TCP/TLS
сервер может отдать Alt-Svc
потом браузер переходит на HTTP/3но это не “магия — сразу в QUIC всегда”.
да нет же, магия. (--origin-to-force-quic-on) Ну т.е. ты просто прогреваешь кэш браузера заранее и заранее заносишь туда данные о том, что целевой ресурс работает по http3. И все, первого стука через TCP/TLS что бы это обсудить не будет.если ты пишешь свой клиент или юзаешь нестандартный стек:
Ну так не будет никакого клиента и нестандартного сетевого стека. Наоборот все стандартно, за исключением отсутсвия первого контакта по TCP.. не могу пока сказать критично это или нет, я не пробовал.HTTP/3 ecosystem моложе
fingerprint DB местами менее богатые
Но крупные антиботы (Cloudflare, Akamai, PerimeterX и т.д.) давно это умеют.
И если у тебя:
датацентр IP
странный pacing
не-хромовый QPACK
weird transport params
Тоже самое, все хромовое будет. Все эти претензии опровергаютсяИногда QUIC даже хуже маскируется, если стек не идентичен браузеру.
Ну камон.. а через TCP не хуже маскируешься, если стек не идентичен браузеру?
Привет всем. Пытаюсь разобраться в методах определения WAFами платформы, что бы она не текла нигде. Начал с L3-L4 уровней OSI (js челенджи и application слой пока вообще за скобками). Ничего вообще в этом не пониманию, поэтому сильно не хейтите.
Мне чат жпт напел, что основные проблемы и лики происходят при хендшейке по TCP и именно на этом этапе крупные игроки типо CloudFlare и прочих сверяют сигнатуры с их известной базой отпечатков по всяким Ja4, window sizе и т.д. И я разгоняю идею о том, что можно же этап TCP хендшейка полностью миновать, если использовать QUIC и сразу перескочить на L7 где все это колдунство происходит на application level и где совершенно другие уже сигнатуры, отпечатки и где различия между платформами меньше (но это не точно). Даже тот самый хром может начать общаться с сервером сразу через QUIC с первого пакета, если сервер поддерживает http3. Эту вообще идею имеет смысл разгонять или это фигня полная и я вообще не понимаю как это работает?
Я подумал что может у WAFов наборов отпечатков http3 меньше и с учетом что по TCP мы с сервером не контачим вообще, то может выглядим человечнее? Спасибо заранее за ответ
буду отстаивать FormRequest в scrapy/scrapy. Правда там ишью - мильон
Читать полностью…
да нет, напишу. Только вот в сомнении в scrapy/scrapy или scrapy/form2request?
Читать полностью…
Как по мне, так логичнее то, о чем kmike в PR говорил - логика во внешней библиотеке, но оставить хелпер FormRequest в API. У меня вот, например, еще и самописный GraphQLRequest хелпер часто в ходу.
Читать полностью…
Cпорное решение убрать FormRequest. Он вроде как логичен, исходя из того, что есть JsonRequest.
Читать полностью…
у клаудфлаера несколько уровней защиты, параметры браузера, фингер принты, и IP, прокси тоже нужны быть не в блэк листе, ну или подключи антикапчу
Читать полностью…
Всмысле ссылку? Да на любой сайт с CF. Не принципиально. У меня таких сайтов 100. Просто нужен html. Думал может библиотеки какие то есть. А там сам поизучаю
Читать полностью…
Нужен просто html. Есть парсер новостных сайтов, все парсит нормально. Все работает отлично вот нужны заблченные сайт теперь
Читать полностью…
Народ как вы обходите клаудфаер. Я вот пробую через camoufox. Тяжелая какая то. Как будто не стабильная. Делаю что то типа аналога у скрапи сплэш но на плейрайте через фаст апи
Читать полностью…
На странице это выглядит так: блок с картинкой и заголовком, а в нём таблица с конкретными товарами.
И в каждый товар нужно добавить эту картинку, а название сконкатенировать с заголовком блока
Просто хочется последовательно подходить к решению вопроса, сначала на уровне TLS утечки минимизировать, а потом уже на уровне JS. Потому что если ты заявляешь что ты приличный windows пользователь, а сервер видит что ты linux в докере крутишь, то и смысла в работе с другими отпечатками на уровнях выше нет. Сначала носки, потом ботинки. Не наоборот
Читать полностью…
мне gpt напел:
Коротко: идея в таком виде неверная или как минимум сильно упрощённая.
Разберу по пунктам.
QUIC не “обходит” fingerprinting
Да, TCP handshake нет, потому что QUIC работает поверх UDP.
Но это не значит, что fingerprinting исчезает. Он просто переезжает в QUIC/TLS ClientHello.
У QUIC есть свои отпечатки:
TLS cipher suites
extensions
transport parameters
packet number behavior
ACK timing
ALPN (h3)
version negotiation
даже особенности реализации стека
То есть вместо JA4 TCP/TLS появляются JA4-QUIC / TLS fingerprints и прочие сигнатуры.
Cloudflare и крупные WAF смотрят не только L3/L4 Это вообще главный misconception.
Они смотрят:
TCP/QUIC fingerprint
TLS fingerprint
HTTP/2 / HTTP/3 framing behavior
Header order
Pseudo-headers (:authority, :path)
HPACK/QPACK особенности
Timing
Cookie behavior
Retry logic
IP reputation
ASN
Request sequencing
Browser challenge telemetry
JS signals
То есть fingerprint — это не “TCP и всё”, это куча сигналов.
Chrome не всегда “сразу QUIC с первого пакета” Тут нюанс.
Обычно:
первый контакт может идти по TCP/TLS
сервер может отдать Alt-Svc
потом браузер переходит на HTTP/3
Есть механизмы вроде preloaded knowledge / cached Alt-Svc, но это не “магия — сразу в QUIC всегда”.
HTTP/3 fingerprinting иногда даже проще заметить Потому что:
если ты пишешь свой клиент или юзаешь нестандартный стек:
quiche
aioquic
lsquic
ngtcp2
то они часто палятся очень характерно.
Реальный Chrome/BoringSSL + сетевое поведение — это не только “отправить h3”.
“Набор отпечатков HTTP/3 меньше” — частично правда, но вывод неправильный Да:
HTTP/3 ecosystem моложе
fingerprint DB местами менее богатые
Но крупные антиботы (Cloudflare, Akamai, PerimeterX и т.д.) давно это умеют.
И если у тебя:
датацентр IP
странный pacing
не-хромовый QPACK
weird transport params
то ты выделяешься сильнее, а не слабее.
⸻
Где ChatGPT тебе напел ерунду
Вот это:
“основные лики происходят при TCP handshake”
— неправда.
TCP window size / MSS / options — это только один маленький сигнал.
В современных антиботах чаще важнее:
TLS + HTTP behavior + JS telemetry + reputation
чем чистый TCP fingerprint.
⸻
Итог
Твоя идея:
“убрать TCP → стать человечнее”
не работает сама по себе.
Правильнее:
“убрать один класс сигналов, но получить другой”
Иногда QUIC даже хуже маскируется, если стек не идентичен браузеру.
Так что это не фигня как мысль, но вывод “QUIC поможет обойти fingerprinting” — слишком оптимистичный и обычно неверный.
А еще у нас частый случай, когда данные формы вручную шлют, без извлечения полей из формы в хтмл, а "form2request() requires an HTML form object". Кодировать body и выставлять хэдеры вручную - утомительно.
Читать полностью…
JsonRequest просто json.dumps() делает, а в FormRequest куча логики
Читать полностью…
2.16.0: https://docs.scrapy.org/en/latest/news.html#scrapy-2-16-0-2026-05-19
Читать полностью…
Всем привет! Кто-то занимался парсингом linkedin? Напиши в лс где вы брали Аккаунты для парсинга пожалуйста!
Читать полностью…
Товарищи, а вот как правильнее разбирать вложенные элементы?
Пока у меня вот такой код:
for block in response.css('div.product_block'):
block_loader = GoodItemLoaderDefault(item=dict(), selector=block, urljoin=urljoin)
block_loader.add_css('url_item', 'div.product_block_img > a::attr(href)')
block_loader.add_css('url_img', 'div.product_block_img img::attr(src)')
block_item = block_loader.load_item()
for good in block.css('table.variants tr'):
n += 1
loader = GoodItemLoaderDefault(item=dict(block_item), selector=good)
loader.add_css('title', 'td.name::text')
loader.add_css('artikul', 'td.name::text', re=re_art)
loader.add_css('price', 'td.price::text', re=re_prace)
loader.add_css('valuta', 'td.price::text', re=re_valuta)
loader.add_css(
'code', 'td.to_cart input[type="hidden"]::attr(name)', re=re_code)
item = loader.load_item()