Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 Контент вільний від AI. Цей пост на 100% написаний людиною, як і все на моєму блозі. Насолоджуйтесь!

16.12.2022

Автоматизація взаємодії з сайтами

🐰✍️🐰 Інколи доводиться автоматизувати деяку взаємодію з сайтом — або ж, інакше кажучи — доводиться її рутинно робити багато разів, а хочеться автоматизувати. От сьогодні мені довелося відновлювати близько 20 тисяч записів, кожний з яких треба завантажити через вебформу.

Не завжди обовʼязково для цього брати справжній браузер. Браузери повільні та складні. Це для інтеграційного тестування варто перевіряти в браузері, щоб переконатись, що додаток працює так, як треба. А для задач автоматизації можна згадати, що все, що робить браузер з сервісом — то посилає запити HTTP, а які самі — можна підглянути в консолі розробника.

Взагалі на Ruby для цього є пречудова бібліотека mechanize. На початку карʼєри рубіста мені чомусь довелось дуже багато зішкрібати інформації з сайтів, вона мені ще тоді полюбилась.

Але якщо треба ще швидше та ще простіше, то у Go найзвичайніший http.Client має можливість зберігати стан сеансу, якщо під’єднати до нього CookieJar. Так я й зробив, бо проєкт на Go. Далі, як вже казав, роблю один запит з імʼям та паролем, щоб авторизуватись, і потім відправляю свої записи.

Цікаво, що вебформа у цьому випадку є фронтендом для внутрішнього API. Тобто все це я роблю замість того, щоб відкрити прямий доступ до того API - це буде і небезпечно, і технічно складніше. А симуляція браузера — хоч і “некрасиве” рішення, але для поодиноких задач — кращий компроміс.