-
Notifications
You must be signed in to change notification settings - Fork 139
Обход капчи и ошибки 429 через вход в аккаунт Авито #226
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
This is intended to fix "Не удалось получить HTML" error
This reverts commit c158978.
…ywright uninstall`
E.g. this will pop up a graphical browser and then ask a user for the password to their Avito account: import asyncio import prompt_user_login asyncio.run(prompt_user_login.wrapper())
…t sensitive session cookies
The leak happens when page.goto throws an error, but the page is not closed properly.
After adding support for the playwright client from parser_cls there's a lot of similar code being shared between get_cookies and parser_cls. It would be a good idea to move proxy functionality into a separate class. Methods from the new class can then be inherited and tailored for a specific need.
Similar code exists in prompt_user_login and should probably be moved into a separate file
|
При запуске на Windows AvitoParser.py не открывает окна и сразу завершается с кодом 0 |
|
@PhotikLed Гляну на днях. Скинь пока версию винды, питона и flet. Ну и плюсом, запуск parser_cls.py в консоли работает? |
|
@InvisibleRain Python 3.13.7; Flet: Version: 0.80.1; Win 11 25H2 parser_cls.py при использовании state.json при инициализации AvitoParse выдает предупреждение:
А так да, работает |
|
Ан, нет. При запросе уже второй страницы появляется ошибка:
|
|
app.log |
|
Судя по всему бан по айпи все-таки прилетает, несмотря на использование state.json. Ведь поначалу работало. |
Через
Похоже мой косяк, поправлю |
Да, входил |
This fixes the `module 'os' has no attribute 'uname'` error on Windows
because we don't know whether the user has logged in into an Avito accountor is using an empty playwright state file
|
С последними коммитами работает на винде (25H2) без проблем с домашнего айпи. Устанавливал через PowerShell без админских прав: Для наглядности прилагаю лог и скриншот: За всё время работы пару запросов отвалилсь по таймауту, но это скорее всего баг в самом Playwright. |
Raise a warning when the playwright state file doesn't contain an account session
|
Привет. Хороший (пусть и большой) PR. Но т.к. еще не вернулся полноценно к работе, то нормально проверить прямо сейчас не получится, немного затянется процесс |
| raise requests.RequestsError(f"Слишком много запросов: {response.status}. Включите прокси либо войдите в аккаунт Авито") | ||
| elif response.status >= 500: | ||
| raise requests.RequestsError(f"Ошибка сервера: {response.status}") | ||
| self.bad_request_count += 1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
код до счётчика не дойдет
|
Извините за долгое отсутствие, никак времени не хватает. Теперь к делу:
Давайте в общем обсуждать |

Заранее извиняюсь за столь большой пулл-реквест, изначально ожидал что кода будет гораздо меньше.
Описание
Данный патч добавляет возможность практически полностью обойти rate-limit авито при работе без прокси. Успешно протестирована продолжительная работа парсера без прокси с интервалами
pause_generalиpause_between_linksв одну секунду.Детали работы
Для активации обхода rate-limit требуется войти в аккаунт Авито на системе с графическим интерфейсом через скрипт
prompt_user_login.pyили кнопку "Войти в аккаунт Авито". После успешного входа сессия пользователя будет сохранена в файл (по умолчанию state.json), после чего будет переиспользована в запросах через Playwright, в том числе и на серверах без графического интерфейса. Был существенно переработан сетевой код. Теперь для запросов к urls и для парсинга просмотров используется Playwright вместо requests.Дополнительные изменения
Также в патче присутствуют мелкие изменения, которые было бы трудно мержить отдельно от данного PR:
ensure_playwright_installed.gitignoreво избежание случайного добавления чувствительных файлов в гитТестирование
Данный патч был протестирован на десктопном Debian 13, а также в контейнере из #224. На винде протестирован в чистом venv на Python 3.13.7; Win 11 25H2. Тестирование на macos не осуществлялось.
Технический долг
На данном этапе из кода не были удалены рудиментарные функции, такие как get_cookies, load_cookies, а также функции для работы с прокси в requests. Рудиментарные функции для работы с прокси в requests предлагаю оставить т.к. они могут пригодиться в случае недоступности телеграма в РФ.
В файлах
get_cookies.py,parser_cls.pyиprompt_user_login.pyесть повторяющийся либо крайне похожий код для работы с Playwright, в том числе с его прокси. Предлагаю вынести весь функционал связанный с Playwright в отдельный класс, и при необходимости наследовать и переопределять методы из данного класса. Это упростит поддержку кода в будущем, а также упростит добавление новых фич, связанных с Playwright.