Як я писав бота для аукціону AliExpress

писав
Знаєте, на aliexpress є такі аукціони — Gaga Deals, зараз там смітник, але колись були дуже цікаві пропозиції. Їхня ідея полягала в тому, що:

  • Продаж стартує щогодини
  • Кількість товарів обмежена
  • Хто перший встав того та тапки

Частково проблема була в тому, що зворотний звіт на сайті відстає від реального годинника, за годину напевно на 5 хвилин. Плюс якщо оновити одночасно 2 сторінки, вони можуть завантажитися зі зсувом у лічильнику в 2 секунди.

Отже, треба постійно оновлювати сторінку та стежити за актуальним лічильником. Відкрив кілька вкладок, став писати бота з обміном інформацією черезlocalstorageрозширення, але на неактивних вкладках були постійні проблеми, то скрипт не стартує, тоquerySelectorнічого не знаходить, то у вибраному елементі тексту з часом немає — парсить нічого. А у активної сторінки завжди все працювало.

Проблема, мабуть, в оптимізації браузера з невидимими вкладками, треба всі сторінки на увазі тримати. Зробив 9 кадрів прямо всередині головної сторінки, в яких постійно оновлювалися сторінки продукту зі лічильником, але тепер прямого доступу до кадру не було. Дивно, всі сторінки на одному домені, скрипт працює з контексту розширення, але при спробі доступу доframes[i].contentDocument- індіанська національна хата - "фігвам" називається. Виявилося, що китайці на головній сторінці присвоювалиdocument.domain = «aliexpress.com»— до домену другого рівня, не знаю навіщо їм це треба, інших кадрів на сторінці немає. Я спробував повернути назад, не тут було. Виявляється, рівень домену зменшувати можна, а збільшувати не можна. Навіть якщо сторінка завантажена з того ж домену, який ти хочеш привласнити. Довелося скрізь міняти домен на другий рівень.прямий доступ до кадрів отримав. Парсил час, обчислював найкраще і не чіпав його поки хтось не завантажувався з кращим часом, оновлював інші фрейми — це працювало, найкращий лічильник завжди був готовий до кліку. Потім число кадрів скоротило до 4.

Налагодив розширення на непотрібних лотах, при часі «Ч» воно мене благополучно вело до капчі, яку я вводив і натискав enter, далі замовлення оформлялося автоматично. Все підготовлено, і я почав чекати на новий розіграш.

Під час наступного розіграшу на мене чекав сюрприз у вигляді діалогових вікон вибору кольору та/або комплектації, такого я ще не бачив і мій бот на них зупинявся, швидко були дописані відповідні кроки та…

Все продано, постійно продано. Занадто повільно, що робити? Китайські та індійські сервіси з розпізнавання капчі спрацюють не швидше за мене. Нормальну програму розпізнавання до розширення не прикрутиш. Вже подумував повернутися до консольної програми, і закинув питання на роботі хто — що знає якісь модулі чи бібліотеки з розпізнавання капчі. Став дивитись як завантажувати капчу, звідки взяти url. Як зауважив особливість, картинка капчі підвантажується з іншого доменуchecktoken1.alibaba.com, в url підставляється ідентифікатор сесії і все, при оновленні картинки - цифри щоразу різні.

Перевірив я свою здогад так: уhostsзаблокував доменchecktoken1.alibaba.comдляchecktoken1.alibaba.coпрописав потрібний IP і завантажив картинку в іншій вкладці (щодо цього я боявся найбільше, з підробленого домену картинка могла б і не завантажиться і довелося б використовувати другий комп'ютер). Оновив форму з капчею. Ввів старе значення, форма спрацювала, капча валідна, досвідченим шляхом встановив значення скидання сесії у 15 хвилин. Допрацювавсторінку з кадрами, зробив текстове поле і картинку з іншого домену, вводив капчу приблизно за 5 хвилин до розіграшу, і розширення працювало як годинник, якщо звичайно був не фейк і не було інших злих роботів.

Власне, тепер можна було б повернутися до консольного додатку, без браузера він би працював набагато спритніше, але ліньки матінка мені підказувала — навіщо писати знову колись і так працює.

Восени 2013-го розробники aliexpress щось зробили з капчею, розпізнана заздалегідь їх перестала задовольняти, і мій бот перестав працювати. У режимі Helper'a з ручним розпізнаванням капчі замовлення оформляється надто повільно.

Хардкорна конфа за С++. Ми запрошуємо лише профі.