Вспоминая собеседования из своего прошлого решил «не идти в гору», а чтобы гора сама пришла ко мне, точнее кадровые сотрудники с вакансиями. Опять поиск работы и теперь на рынке где реальные доходы стали меньше, а соискателей больше…
Но тратить время на рутинные операции по поиску и добавлению профессионалов в социальной сети не хотелось. После 2000 кликов вручную критерии поиска у меня оказались формализуемые. Поэтому написал скрипт который экономит мое время и зрение. К общению с людьми я не пускаю бездушного «робота». Сам пишу и сам отвечаю.
Мне посчастливилось познакомиться и пообщался с интересными людьми из индустрии, получить сотни сообщений со спамом и ссылки на сотни вакансий. Готового скрипта здесь не будет, но в публикации есть пара фрагментов кода для магии webdriver и ссылки. Также вы узнаете последние новости про поиск работы в России и описание моего опыта по продвижению в соцсети…
Это только присказка...
Мой опыт
Путь от 160 контактов в соцсети до 30000 контактов занял у меня пол года. Добавлял небольшим количеством запросов в сутки. Во-первых я никуда не спешил. Провел пару недель на больничном — перенес ЛОР операцию и еще пару недель после больничного я восстанавливался. На дворе было лето и можно было загорать в обед и кататься на велосипеде. В конце лета выбрались на море на пару недель. Собрал очередной станок с ЧПУ собственной разработки на рельсовых направляющих, с возможностью «рулить» из программы в JVM. Я продолжал заниматься любимым делом но теперь уже все 8 часов в день. Программировал на java и groovy, но уже для своих хобби-проектов. Изучал новые технологии, которые популярны на рынке.
А в это время скрипт пару раз в день трудился за меня — искал и добавлял новые контакты. Я отвечал на сообщения, общался с людьми и тратил на это не больше получаса в день.
Надежды, как на платформу для публикаций новостей на профессиональные темы себя не оправдали. Сотни просмотров публикаций, минимальная активность пользователей.
Больше 30000 не добавить из-за искусственного ограничения сети. Сейчас у меня 320 запросов от людей на добавление их в контакты, но из-за этого ограничения добавить их я не могу.
Продолжительное время я был на 1м месте по числу просмотров среди своего первого круга и первое место по просмотрам сотрудников последнего места работы. Проверено, что это превосходство не дает ничего полезного!!! Я всегда пользовался бесплатным аккаунтом и не видел смысла вступать в маркетинговые акции сети «введите номер вашей банковской карты — первый месяц бесплатно».
Что мне понравилось — можно получить интересные сообщения и узнать о новом, когда добавляешь незнакомого пользователя в контакты. Ну и самый приятный и неожиданный наплыв сообщений был поздравлениями с днем рождения — около 200 входящих!
В основном, предложения вакансий были с переездом за границу, но не в самые интересные локации. На нашем рынке предлагали много вакансий либо в неинтересных предметных областях где особо и не нужна моя экспертиза и технические знания, либо это вакансии в компаниях про внутренние условия в которых я знал от разных людей, либо оплата меня не устраивала.
Чтобы пройти череду интервью и через жернова формальных тестов и миллионов алгоритмических задач в google и компании с подобным конкурсом мне жалко сил и скорее всего зря потерянного времени. Хотя мне и приходило предложение поучаствовать в этом увлекательном процессе. К тому же негативный опыт говорит, что выполнение даже сложных тестовых заданий с написанием кода по TDD на собеседовании или после него не гарантирует что будешь после этого заниматься интересной работой по профессии с технически сложными задачами.
Новости прошлой недели
Кроме покупки социальной сети Microsoft, что стало для меня сюрпризом, следующие новости шокировали еще больше. Мосгорсуд признал законным решение о блокировке LinkedIn в России. Суть претензий к соцсети — несоблюдение закона «О персональных данных», который требует чтобы сервера с данными граждан находились на территории России. И эта новость была об отклонении апелляции соцсети по прошлому решению Таганского районного суда Москвы.
Самое забавное во всем этом — это комментарий Ольги Голодец. Она заявила, судя по публикации в новостях, что одной из основных возможностей для трудоустройства россиян остается портал Роструда — общероссийская база вакансий «Работа в России». Я впервые узнал о его существовании из новостей. А вы, как ИТ профессионалы, часто им пользуетесь и слышали про него?
Программная часть
По вполне понятным причинам, в том числе, чтобы избежать хабрэффекта, скрипт я не буду раздавать. Но той информации, которую я публиковал на хабре вместе с моими примерами по ссылкам на гитхаб, хватит для желающих автоматизировать рутинное взаимодействие с почти любыми веб сайтами.
Есть пословица: дай голодному рыбу — и ты накормишь его на один день. Дай ему удочку, научи его ловить рыбу — и ты накормишь его на всю жизнь.
Все про что я рассказываю основано на open source.
Капитализм как нам его рисуют: не кормить голодного рыбкой, а дать ему удочку.
Капитализм как он есть на самом деле: не давать удочку, а продать ее в кредит, не давая голодному понять, что ни доступа к рыбному пруду, ни права на отлов у него все равно нет, т. к. и пруд и рыба давно принадлежат тем, кому он теперь еще и за удочку должен…
Снова возвращаясь к технологиям. Раньше уже рассказывал на хабре про вебдрайвер «Что нам стоит сайт распарсить. Основы webdriver API». Рекомендую прочитать для начала ту статью, а здесь лишь опишу новую информация из личного опыта про то как автоматически загрузить и подключить к программе вебдрайвер для chrome, как скроллировать из скрипта страницу по вертикали. И если «безголовый» браузер PhantomJS сайту легко обнаружить и заблокировать ваш аккаунт, то с chromium+webdriver так легко это не сделаешь.
Автоматическая установка драйвера для chrome
В webdriver для реального браузера кроме API на стороне клиента есть и исполнимая в отдельном процессе часть, которая делает браузер марионеткой нашего приложения.
Часто его скачивают вручную и указывают путь в приложении. Но зачем, если можно это сделать автоматически.
Для этого в JVM приложении нужно добавить зависимость com.github.igor-suhorukov:mvn-classloader:1.6.
В зависимости от того, какая у вас операционная система передать в качестве значения os win32, linux64 или mac64. win32 работает и на 64 разрядных системах.
String chromedriver = MavenClassLoader.usingCentralRepo().resolveArtifact("com.github.igor-suhorukov:chromedriver:bin:" + os + ":2.24").getFile();
// в случае linux нужно сделать в программе chmod(chromedriver);
System.setProperty("webdriver.chrome.driver", chromedriver);
Сравним с тем как это делали для PhantomJS:
// зависимость для проекта com.github.igor-suhorukov:phantomjs-runner:1.1
import com.github.igorsuhorukov.phantomjs.PhantomJsDowloader
...
String phantomJsPath = PhantomJsDowloader.getPhantomJsPath()
Прокрутка окна с динамической подгрузкой данных
Код ниже работает у меня в chromium и скролирование страницы вызывается из метода submitRequest. Для прокрутки окна использую javascript и чтобы выполнить его из контекста страницы нужно привести тип вебдрайвера к типу org.openqa.selenium.JavascriptExecutor. Данные страницы при прокрутке подгружаются динамически.
private static void submitRequest(WebDriver driver) throws InterruptedException {
...
scroll((JavascriptExecutor) driver, (long) (MIN_SCROLL + Math.random() * SCROLL_INTERVAL));
...
}
private static void scroll(JavascriptExecutor javascriptExecutor, long maxScroll) throws InterruptedException {
long valPrev = 0;
long val = 0;
while (valPrev< maxScroll && (val = scrollViewport(javascriptExecutor)) >valPrev){
valPrev = val;
Thread.sleep((long) (MIN_TIME+Math.random()*TIME_INTERVAL));
}
}
private static Long scrollViewport(JavascriptExecutor driver) {
return (Long) driver.executeScript("var h=document.documentElement.scrollHeight; window.scrollTo(0, h); return h;");
}
Что дальше?
Написание скрипта с webdriver решает лишь малую часть того что нужно сделать для поиска. И золотая рыбка все еще не поймана. К тому же жизнь полна сюрпризов! И что будет дальше после блокировки социальной сети мы узнаем в ближайшее время. Жаль лишь будет потерять возможность общаться с профессионалами из сфер далеких от ИТ, кто все еще не умеет пользоваться VPN или Tor…
Автор: igor_suhorukov