package Ġru . ser ob yan . vk _ photo _ crawler . di Ċ Ċ import Ġcom . zaxxer . hikari . HikariConfig Ċ import Ġcom . zaxxer . hikari . Hikari DataSource Ċ import Ġio . netty . handler . codec . http . Default HttpResponse Ċ import Ġio . netty . handler . codec . http . HttpRequest Ċ import Ġio . netty . handler . codec . http . HttpResponse Status Ċ import Ġio . netty . handler . codec . http . Http Version Ċ import Ġnet . light body . bmp . Browser Mob Proxy Ċ import Ġnet . light body . bmp . Browser Mob Proxy Server Ċ import Ġnet . light body . bmp . client . Client Util Ċ import Ġnet . light body . bmp . proxy . Capture Type Ċ import Ġnet . light body . bmp . util . Http Message Contents Ċ import Ġnet . light body . bmp . util . Http MessageInfo Ċ import Ġorg . jetbrains . ex posed . sql . Database Ċ import Ġorg . jetbrains . ex posed . sql . Schema Utils Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġorg . kode in . di .* Ċ import Ġorg . openqa . selenium . Proxy Ċ import Ġorg . openqa . selenium . WebDriver Ċ import Ġorg . openqa . selenium . chrome . Chrome Driver Ċ import Ġorg . openqa . selenium . chrome . Chrome Options Ċ import Ġorg . openqa . selenium . remote . Capability Type Ċ import Ġru . ser ob yan . vk _ photo _ crawler . app . App Ċ import Ġru . ser ob yan . vk _ photo _ crawler . model . Vk Photo Table Ċ import Ġru . ser ob yan . vk _ photo _ crawler . service . vk . cookie . Cookie Storage Ċ import Ġru . ser ob yan . vk _ photo _ crawler . service . vk . group . photo . downloader . Vk Photo Downloader Ċ import Ġru . ser ob yan . vk _ photo _ crawler . service . vk . group . photo . ids _ crawler . Vk Group Photo Ids Crawler Ċ import Ġru . ser ob yan . vk _ photo _ crawler . service . vk . group . photo . ids _ crawler . Vk Group Photo Ids Getter Ċ import Ġru . ser ob yan . vk _ photo _ crawler . service . vk . group . photo . urls _ crawler . Vk Group Photo Url Getter Ċ import Ġru . ser ob yan . vk _ photo _ crawler . service . vk . group . photo . urls _ crawler . Vk Group Photo Urls Crawler Ċ import Ġru . ser ob yan . vk _ photo _ crawler . service . vk . login . Vk Login Service Ċ import Ġjava . net . Inet 4 Address Ċ import Ġjavax . sql . DataSource Ċ Ċ val Ġselenium Module Ġ= ĠDI . Module (" selenium ") Ġ{ ĊĠĠĠ Ġbind < WebDriver >( tag Ġ= Ġ" proxy ") Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" webdriver . chrome . driver ", ĠConfig . path To Chrome Driver ) ĊĠĠĠĠĠĠĠ ĠChrome Driver ( instance < Chrome Options >( tag Ġ= Ġ" proxy ")) ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind < WebDriver >( tag Ġ= Ġ" no - proxy ") Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" webdriver . chrome . driver ", ĠConfig . path To Chrome Driver ) ĊĠĠĠĠĠĠĠ ĠChrome Driver () ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġproxy Module Ġ= ĠDI . Module (" proxy ") Ġ{ ĊĠĠĠ Ġbind < Browser Mob Proxy >() Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproxy : ĠBrowser Mob Proxy Ġ= ĠBrowser Mob Proxy Server () ĊĠĠĠĠĠĠĠ Ġproxy . add Request Filter Ġ{ Ġrequest : ĠHttpRequest , Ġ_: ĠHttp Message Contents , Ġ_: ĠHttp MessageInfo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforbidden Ġ= ĠlistOf (". jpg ", Ġ". png ", Ġ". gif ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( for bidden . any Ġ{ Ġit Ġin Ġrequest . uri Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault HttpResponse ( Http Version . HTTP _ 1 _ 1 , ĠHttpResponse Status . NOT _ FOUND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproxy . enable Har Capture Types ( Capture Type . RESPONSE _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġproxy . start () ĊĠĠĠĠĠĠĠ Ġproxy ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind < Proxy >() Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproxy Server Ġ= Ġinstance < Browser Mob Proxy >() ĊĠĠĠĠĠĠĠ Ġval Ġselenium Proxy Ġ= ĠClient Util . create Sel enium Proxy ( proxy Server ) ĊĠĠĠĠĠĠĠ Ġval Ġhost Ip Ġ= ĠInet 4 Address . getLocal Host (). host Address ĊĠĠĠĠĠĠĠ Ġval Ġport Ġ= Ġproxy Server . port ĊĠĠĠĠĠĠĠ Ġselenium Proxy . http Proxy Ġ= Ġ"$ host Ip :$ port " ĊĠĠĠĠĠĠĠ Ġselenium Proxy . ssl Proxy Ġ= Ġ"$ host Ip :$ port " ĊĠĠĠĠĠĠĠ Ġselenium Proxy ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind < Chrome Options >( tag Ġ= Ġ" proxy ") Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠChrome Options () ĊĠĠĠĠĠĠĠ Ġval Ġselenium Proxy Ġ= Ġinstance < Proxy >() ĊĠĠĠĠĠĠĠ Ġoptions . set Capability ( Capability Type . PROXY , Ġselenium Proxy ) ĊĠĠĠĠĠĠĠ Ġoptions . add Arguments ("-- ignore - certificate - errors ") ĊĠĠĠĠĠĠĠ Ġoptions ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġcookie Storage Module Ġ= ĠDI . Module (" cookie _ storage ") Ġ{ ĊĠĠĠ Ġbind < Cookie Storage >() Ġwith Ġsingleton Ġ{ ĠCookie Storage () Ġ} Ċ } Ċ Ċ val Ġdownload Module Ġ= ĠDI . Module (" download ") Ġ{ ĊĠĠĠ Ġbind < Vk Photo Downloader >() Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠVk Photo Downloader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphotos Dir Ġ= ĠConfig . photos Dir ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġdb Module Ġ= ĠDI . Module (" db ") Ġ{ ĊĠĠĠ Ġbind < HikariConfig >() Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠH ikariConfig (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc Url Ġ= ĠConfig . jdbc Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver ClassName Ġ= Ġ" org . sqlite . JDBC " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum PoolSize Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind < DataSource >() Ġwith Ġsingleton Ġ{ ĠH ikari DataSource ( instance ()) Ġ} ĊĠĠĠ Ġbind < Database >() Ġwith Ġeager Singleton Ġ{ ĊĠĠĠĠĠĠĠ ĠDatabase . connect ( instance < DataSource > ()). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĠSchema Utils . create ( Vk Photo Table ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġkv Module Ġ= ĠDI . Module (" vk ") Ġ{ ĊĠĠĠ Ġbind < Vk Group Photo Ids Crawler >() Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠVk Group Photo Ids Crawler ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Login Service Ġ= Ġinstance ( tag Ġ= Ġ" proxy "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Group Photo Ids Getter Ġ= Ġinstance () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind < Vk Group Photo Urls Crawler >() Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠVk Group Photo Urls Crawler ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Login Service Ġ= Ġinstance ( tag Ġ= Ġ" no - proxy "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Group Photo Url Getter Ġ= Ġinstance () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind < Vk Login Service >( tag Ġ= Ġ" proxy ") Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠVk Login Service ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġinstance ( tag Ġ= Ġ" proxy "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcookie Storage Ġ= Ġinstance () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind < Vk Login Service >( tag Ġ= Ġ" no - proxy ") Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠVk Login Service ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġinstance ( tag Ġ= Ġ" no - proxy "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcookie Storage Ġ= Ġinstance () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind < Vk Group Photo Ids Getter >() Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠVk Group Photo Ids Getter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġinstance ( tag Ġ= Ġ" proxy "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproxy Ġ= Ġinstance () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġbind < Vk Group Photo Url Getter >() Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠVk Group Photo Url Getter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġinstance ( tag Ġ= Ġ" no - proxy ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġapp Module Ġ= ĠDI . Module (" app ") Ġ{ ĊĠĠĠ Ġbind < App >() Ġwith Ġsingleton Ġ{ ĊĠĠĠĠĠĠĠ ĠApp ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Group Photo Ids Crawler Ġ= Ġinstance (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Group Photo Urls Crawler Ġ= Ġinstance (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvk Photo Downloader Ġ= Ġinstance (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver With Proxy Ġ= Ġinstance ( tag Ġ= Ġ" no - proxy "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver Ġ= Ġinstance ( tag Ġ= Ġ" proxy "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproxy Ġ= Ġinstance () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val Ġdi Ġ= ĠDI Ġ{ ĊĠĠĠ Ġimport ( selenium Module ) ĊĠĠĠ Ġimport ( proxy Module ) ĊĠĠĠ Ġimport ( cookie Storage Module ) ĊĠĠĠ Ġimport ( kv Module ) ĊĠĠĠ Ġimport ( db Module ) ĊĠĠĠ Ġimport ( download Module ) ĊĠĠĠ Ġimport ( app Module ) Ċ }