package Ġorg . asion . bot . parser Ċ Ċ import Ġorg . asion . bot . Capture Item Ċ import Ġorg . openqa . selenium . By Ċ import Ġorg . openqa . selenium . WebDriver Ċ import Ġorg . openqa . selenium . WebElement Ċ import Ġorg . openqa . selenium . phantom js . Ph antom J SD river Ċ import Ġorg . openqa . selenium . support . ui . WebDriver Wait Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author ĠA sion . Ċ Ġ* Ġ@ since Ġ 2 0 1 8 / 5 / 1 8 . Ċ Ġ*/ Ċ @ Component Ċ class ĠWebDriver Detail Parser Ġ{ ĊĊĠĠĠ Ġfun Ġparse ( item : ĠCapture Item , Ġdriver : ĠPh antom J SD river ): ĠCapture Item Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Detail Tag Ġ= Ġfind Element ( driver , ĠBy . css Selector ("# J _ Detail Meta ")) ĊĠĠĠĠĠĠĠ Ġprintln (" item D tail : Ġ$ item Detail Tag ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġ åķĨåĵģ åĲįç§° Ġå°ı æłĩé¢ĺ Ġ# J _ Detail Meta Ġ> Ġdiv . tm - clear Ġ> Ġdiv . tb - property Ġ> Ġdiv Ġ> Ġdiv . tb - detail - hd Ġ> Ġh 1 ĊĠĠĠĠĠĠĠ Ġ// Ġ// * [@ id =" J _ Detail Meta "] / div [ 1 ]/ div [ 1 ]/ div / div [ 1 ]/ h 1 ĊĠĠĠĠĠĠĠ Ġval Ġitem Name Tag Ġ= Ġfind Element ( driver , ĠBy . css Selector ("# J _ Detail Meta Ġ> Ġdiv . tm - clear Ġ> Ġdiv . tb - property Ġ> Ġdiv Ġ> Ġdiv . tb - detail - hd Ġ> Ġh 1 ")) ĊĠĠĠĠĠĠĠ Ġif Ġ( itemName Tag Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Name Ġ= Ġitem Name Tag . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . itemName Ġ= Ġitem Name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprice Box Ġ= Ġfind Element ( driver , ĠBy . id (" J _ Str Price Mod Box ")) ĊĠĠĠĠĠĠĠ Ġprintln (" price Box : Ġ$ price Box ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġ åİŁ ä»· Ġ# J _ Str Price Mod Box Ġ> Ġdd Ġ> Ġspan Ġ// * [@ id =" J _ Str Price Mod Box "] / dd / span ĊĠĠĠĠĠĠĠ Ġ// Ġ ä¿ ĥ éĶĢ ä»· ï¼ļ # J _ Promo Price Ġ> Ġdd Ġ> Ġdiv Ġ> Ġspan Ġ// * [@ id =" J _ Promo Price "] / dd / div / span ĊĠĠĠĠĠĠĠ Ġval Ġmarket Price Tag Ġ= Ġfind Element ( driver , ĠBy . xpath (" //* [@ id =\" J _ Str Price Mod Box \"] / dd / span ")) ĊĠĠĠĠĠĠĠ Ġif Ġ( market Price Tag Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarket Price Ġ= Ġmarket Price Tag . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . market Price Ġ= Ġmarket Price ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . Ġ åĵģ çīĮ Ġ# J _ Brand Attr Ġ> Ġdiv Ġ> Ġb Ġ// * [@ id =" J _ Brand Attr "] / div / b ĊĠĠĠĠĠĠĠ Ġval Ġbrand Tag Ġ= Ġdriver . findElement By Css Selector ("# J _ Brand Attr Ġ> Ġdiv Ġ> Ġb ") ĊĠĠĠĠĠĠĠ Ġvar Ġbrand Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( brand Tag Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbrand Name Ġ= Ġbrand Tag . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . brand Name Ġ= Ġbrand Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrand Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġå±ŀæĢ§ li æłĩçŃ¾ ĊĠĠĠĠĠĠĠ Ġval Ġattr Tag Ġ= Ġdriver . find Elements By Css Selector ("# J _ Attr UL Ġ> Ġli ") ĊĠĠĠĠĠĠĠ Ġif Ġ( attr Tag Ġ!= Ġnull Ġ&& Ġattr Tag . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 4 . Ġ äº§ åľ° Ġ# J _ Attr UL Ġ> Ġli : nth - child ( 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġflag Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġattr Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Text Ġ= Ġelement . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Text . contains (" äº§ åľ° ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Ġ= Ġe Text . substring ( e Text . indexOf (" äº§ åľ° : Ġ") Ġ+ Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . country Ġ= Ġcountry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éŁ © åĽ½ åĵģ çīĮ Ġ èıľ é¸ Ł å®ģ æ³¢ ä¿Ŀ ç¨ İ 3 åı· ä»ĵ åıĳ è´§ Ġ# J _ Detail Meta Ġ> Ġdiv . tm - clear Ġ> Ġdiv . tb - property Ġ> Ġdiv Ġ> Ġdiv . tb - detail - hd Ġ> Ġdiv . from Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Tag 1 Ġ= Ġdriver . findElement By Css Selector ("# J _ Detail Meta Ġ> Ġdiv . tm - clear Ġ> Ġdiv . tb - property Ġ> Ġdiv Ġ> Ġdiv . tb - detail - hd Ġ> Ġdiv . from Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( country Tag 1 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġcountry Tag 1 . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcountry Ġ= Ġtext . trim (). substring ( 0 , Ġtext . indexOf (" åĵģ çīĮ ") Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . country Ġ= Ġcountry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 5 . Ġ è§Ħ æł¼ Ġ# J _ Attr UL Ġ> Ġli : nth - child ( 6 ) Ġ åĲ« éĩı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġattr Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Text Ġ= Ġelement . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Text . contains (" åĲ« éĩı ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqual ification Ġ= Ġe Text . substring ( e Text . indexOf (" åĲ« éĩı : Ġ") Ġ+ Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . qual ification Ġ= Ġqual ification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! brand Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ# J _ attr Brand Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġdriver . findElement ById (" J _ attr Brand Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Text Ġ= Ġelement . getAttribute (" title ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Text . contains (" åĵģ çīĮ : Ġ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbrand Name Ġ= Ġe Text . substring ( e Text . indexOf (" åĵģ çīĮ : Ġ") Ġ+ Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . brand Name Ġ= Ġbrand Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Element ( driver : ĠWebDriver , Ġby : ĠBy ): ĠWeb Element ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Element ( driver , Ġby , Ġ 1 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Element ( driver : ĠWebDriver , Ġby : ĠBy , Ġtimeout InSeconds : ĠLong ): ĠWeb Element ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( timeout InSeconds Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwait Ġ= ĠWebDriver Wait ( driver , Ġtimeout InSeconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwait . until Ġ{ Ġit . findElement ( by ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdriver . findElement ( by ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ }