Публикация кворков на kwork.ru из JSON-файла: заголовок, рубрика, описание, цена, опции, картинки и частые вопросы — одним запуском. Плюс валидатор, который проверяет данные до того, как форма развернёт вас на очередном негласном правиле.
Собрано на живом опыте: девять кворков, выложенных вручную и потом переписанных в скрипт. Руками один кворк — это ~50 полей, спрятанных за chosen-селектами, contenteditable и Vue-виджетами, и минут сорок времени. Скриптом — пара минут.
Форма kwork охотно молчит. Несколько правил, на которых легко потерять вечер:
| Правило | Как проявляется |
|---|---|
| Цена кворка — только 500, 1000, 1500… | 700 ₽ просто нельзя выбрать |
| Цена опции — 100–500 шагом 100, дальше шагом 500 | то же самое |
| В вопросах и ответах — не меньше 70% русского текста | кнопка «Добавить вопрос» не появляется. Без ошибки. Вообще без реакции |
| В названии опции — не меньше 35% русского | опция не сохраняется |
| «От покупателя» — минимум 100 символов | ошибка появляется только при попытке опубликовать |
| В названии кворка нельзя скобки | «не должно содержать символы кроме букв, цифр» |
| Картинка должна догрузиться на сервер | пока в блоке data: вместо cdn-edge.kwork.ru, кнопка «Сохранить» молча ничего не делает |
publish.py --check проверяет всё это офлайн, за секунду, не открывая браузер.
Ещё две вещи, которые стоили мне времени и теперь зашиты в код: кнопку «Сохранить» kwork слушает
только при настоящем клике мышью (JS-click() по ней не срабатывает), а кнопка «Добавить ещё»
для опций, наоборот, перекрыта липкой шапкой — её берёт только JS-клик. В FAQ вопрос сохраняется
не по кнопке, а по blur: ушёл фокус — вопрос схлопнулся в карточку.
pip install playwright
playwright install chromiumpython publish.py --login # один раз: войти на kwork, сессия ляжет в .profile/
python publish.py --check # проверить данные, браузер не открывается
python publish.py --all # опубликовать все кворки из kworks.json
python publish.py excel # опубликовать один — по полю "id"
python publish.py excel --dry-run # заполнить форму и остановиться, не публикуяСвои данные держите в kworks.json рядом со скриптом (или укажите --data path/to/file.json).
Пути к картинкам — относительно файла с данными.
Про цены. В JSON — цена, которую видит покупатель. В форме kwork это value селекта,
а подпись рядом («800 ₽») — то, что достанется вам: площадка забирает 20%. Если на обложке
нарисована цена, рисуйте ту же, что в JSON, иначе карточка обещает одно, а корзина показывает другое.
Скрипт работает с вашим собственным аккаунтом продавца и делает ровно то, что вы сделали бы руками: заполняет форму и жмёт «Опубликовать». Это не накрутка, не мультиаккаунтинг и не обход защиты — сессия живёт в обычном профиле Chromium, вход выполняете вы сами.
Kwork меняет вёрстку без предупреждения. Если что-то отвалилось — запустите с --dry-run
и посмотрите, на каком поле форма встала: селекторы собраны в одном месте, чинится быстро.
MIT.
{ "kworks": [ { "id": "excel", // как обращаться к кворку в командной строке "category": { "parent": "Бизнес и жизнь", // ищется по вхождению текста "sub": "Персональный помощник", "attrs": ["Работа в MS Office", "Excel"] // «Тип», «Программы» и т.п. }, "title": "Я обработаю и оформлю таблицу Excel: формулы, сводные, графики", "desc": "Абзац о сути услуги…", "includes": ["чистка данных", "формулы", "сводная таблица"], // блок «Что входит» "from_buyer": ["ваш файл", "что нужно получить на выходе"], // блок «От покупателя» "volume": "Обработка одной таблицы: чистка, формулы, сводная", // объём услуг в 1 кворке "volume_number": 3000, // если в рубрике объём числовой (знаки, штуки) "price": 1000, // цена ПОКУПАТЕЛЯ "days": 1, "options": [{ "name": "Макрос / кнопка автоматизации", "price": 500 }], "faq": [{ "q": "Макрос или формулы?", "a": "Как удобнее — сделаю по кнопке." }], "images": { "cover": "images/cover.png", // обложка, минимум 660×440 "gallery": ["images/2.png", "images/3.png"] } } ] }