ç§ã®ååã¯Vitaliy Kotovã§ãBadooãã¹ãéšéã§åããŠããŸãã ã»ãšãã©ã®å Žåãç§ã¯Seleniumã䜿çšããŠããŸãã ãã®çŽ æŽãããããŒã«ã䜿çšããŠãããŸããŸãªã¿ã¹ã¯ã解決ããŸããæ©èœã®ãã¹ãããããšã©ãŒãã°ã§ã®äœæ¥ã®ç°¡çŽ åãAPIãšã®çžäºäœçšã®ãã§ãã¯ãŸã§ã§ãã
ãã®èšäºã§ã¯ãSeleniumã解決ããã®ã«åœ¹ç«ã€ã¿ã¹ã¯ã«ã€ããŠèª¬æããŸãã è¡ããïŒ :)
ã»ã¬ã³ã«ã€ããŠå°ã
GoogleããSeleniumãã«ã€ããŠæåã«äŒããããšã¯æ¬¡ã®ãšããã§ãã
Seleniumã¯Webãã©ãŠã¶ãŒèªååããŒã«ã§ãã ã»ãšãã©ã®å ŽåãWebã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã«äœ¿çšãããŸãããããã«éå®ãããŸããã
Seleniumã䜿çšãããšãæã§ã§ããããšãšã»ãŒåãããšãå®è¡ã§ããŸããããŒãžãéããŠãããããšããåãããŸãã ãããã圌ã¯ç®ãããŒãããããšãã§ããã誀ã£ãŠééã£ãæ¹åã«ã¯ãªãã¯ããããšãã§ããªããããããéã確å®ã«è¡ããŸãã
ãã¹ãã®èªååã«ãããŠãSeleniumãæåã«äœ¿çšãããã®ã¯ããµã€ãã®æ©èœããã§ãã¯ããããšã§ãã
æ©èœãã§ãã¯
ãŠãŒã¶ãŒã¯éåžžããµã€ãã§äœãããŸããïŒ åœŒãã¯ãããéããååŸã«ã¯ãªãã¯ããã¯ãªãã¯ã®çµæãããã€ãèŠãïŒãªãã€ã¬ã¯ãããããã¢ãããèŠçŽ ã®åŒ·èª¿è¡šç€ºãªã©ã ãã®ããã»ã¹ããã¹ããããïŒå¿ èŠãããïŒã ãŠãŒã¶ãŒã«ãããžãã¹ããžãã¯ã«åã蟌ãŸããã¢ã¯ã·ã§ã³ã«å¯Ÿããå¿çãæ£ç¢ºã«è¡šç€ºãããå¿ èŠããããŸãã
ãããè¡ãããã«ããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ãèšè¿°ããã¹ã¯ãªãããäœæãããŸãã äŸïŒ
- ãµã€ããéããŸãã
- èªèšŒãã¿ã³ãã¯ãªãã¯ããŸãã
- ãã°ã€ã³ãã©ãŒã ãããŒããããã®ãåŸ ã¡ãŸãã
- ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå ¥åããŸãã
- [éä¿¡]ãã¿ã³ãã¯ãªãã¯ããŸãã
- èš±å¯ãããããŒãžãžã®ãªãã€ã¬ã¯ããåŸ ã¡ãŸãã
ãµã€ãã§èªèšŒãå£ããŠããå ŽåïŒããšãã°ãããã°ã©ããäœããå°ç¡ãã«ããå ŽåãgetUserã¡ãœããã¯åžžã«falseãè¿ããŸãïŒãSeleniumã¯ã¹ããã6ãå®è¡ã§ããŸããããã¹ãã¯å€±æããéç¥ãããŸãã å®éãã³ãŒãã®ã©ããã§äŸå€ãã¹ããŒãããããã»ã¹ã¯å¯Ÿå¿ãããšã©ãŒã³ãŒãã§çµäºããŸãã
ãã®äžé£ã®ã¢ã¯ã·ã§ã³ã¯ãæ©èœãã¹ããšåŒã°ããŸãã ããã¯ããããSeleniumã䜿çšããæãäžè¬çãªæ¹æ³ã§ãã ãããããã£ãšé¢çœããã®ããããŸãã
JSãšã©ãŒåé
éåžžã®ãŠãŒã¶ãŒã«ã¯ãJSãšã©ãŒã¯è¡šç€ºãããŸããã ããã¯æ£ããã§ã-圌ã¯å¿ èŠãããŸããã ãã ããéçºè ã«ãšã£ãŠã¯ãã³ãŒãããã·ã¥ãŒãããããã©ãããç解ããããšãéèŠã§ãã ãã®ã³ã³ããã¹ãã®JSãšã©ãŒã¯ããŠãŒã¶ãŒã«æ°ä»ããã®ãšãŠãŒã¶ãŒã«å¹²æžããªããã®ã®2çš®é¡ã«åããŸãã
æåã®ã¿ã€ãã®ãšã©ãŒã§ã¯ããã¹ãŠãæããã§ãã JSãšã©ãŒã®ããã«ãµã€ãããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«å¿çããªãå ŽåãSeleniumãã¹ãã¯ãããèªèããŸãã
2çªç®ã®ã¿ã€ãã®ãšã©ãŒã§ã¯ããã¹ãŠãããè€éã«ãªããŸãã ã¢ããªã±ãŒã·ã§ã³ã®äœ¿çšã劚ããªãå Žåãä¿®æ£ãã䟡å€ã¯ãããŸããïŒ Badooã§ã¯ããã®ãããªãšã©ãŒãšç¬¬1çš®ã®ãšã©ãŒãä¿®æ£ããããšããŸãã ãŸããäœããã®æ¹æ³ã§ãšã©ãŒãçºçãããšãåé¡ãçºçããŸãã 第äºã«ãããå Žåã«ãŠãŒã¶ãŒã«å¹²æžããªãå Žåãããã¯å¥ã®å Žåã«ãŠãŒã¶ãŒã«å¹²æžããªããšããæå³ã§ã¯ãããŸããã
Badooéçºè ã¯ãç¬èªã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠJSãšã©ãŒãåéããŸãã ã¯ã©ã€ã¢ã³ãã§ãšã©ãŒãçºçãããšãã³ãŒãã¯ãã¹ãŠã®å¯èœãªããŒã¿ãåéãããããç¹å¥ãªã¹ãã¢ã«éä¿¡ããŸãã ãšã©ãŒãçºçããæéããŠãŒã¶ãŒæ å ±ãããã³ãã¬ãŒã¹ã«é¢ããæ å ±ãä¿åããŸãã ãã ãããã®æ å ±ã§ããããšã©ãŒãåçŸããã«ã¯äžååãªå ŽåããããŸãã ãããSeleniumãç§ãã¡ãå©ããå Žæã§ãã
Seleniumãã¹ãã§ã¯ããŠãŒã¶ãŒããµã€ãã§å®è¡ããæãäžè¬çãªã¢ã¯ã·ã§ã³ããã¹ãŠãã§ãã¯ããŸãã ãšã©ãŒãããå Žåããããã®ãã¹ãã®ééäžã«ãšã©ãŒãçºçããå¯èœæ§ãé«ããªããŸãã ãã®ãããªãšã©ãŒã«æ³šæããããã«Seleniumã«æããŠãã ããã
ãã®åé¡ã次ã®ããã«è§£æ±ºããŸããããã¹ããµãŒããŒã®ã¿ã«æ¥ç¶ããããã³ãã¬ãŒããè¿œå ããŸããã ãã®ãã³ãã¬ãŒãã«ã¯ãJSãšã©ãŒãç¹å®ã®ãªããžã§ã¯ãã«åéããJSã³ãŒãããããŸããã ãã®ãããªãã®ïŒ
var errorObj = { _errors : [], addError : function(message, source, lineno) { this._errors.push( "Message: " + message + "\n" + "Source: " + source + "\n" + "Line: " + lineno ); }, getErrors : function() { return this._errors; } } window.onerror = function(message, source, line_no) { errorObj.addError(message, source, line_no); }
åãããšã¯ã executeã³ãã³ãã䜿çšããŠSeleniumãã¹ãèªäœã§å®è¡ã§ããŸãã ãŠãŒã¶ãŒããã©ãŠã¶ã³ã³ãœãŒã«ãéããŠã³ãŒããå®è¡ãããã®ããã«ãããŒãžã§JSã³ãŒããå®è¡ã§ããŸãã ãããããã®åŸãããã€ãã®ééããèŠéãå¯èœæ§ããããŸãã
å®éãããŒãžãå®å šã«ããŒããããåŸã«ã®ã¿ãSeleniumãã¹ãã§ãã®ã³ãŒããå®è¡ã§ããŸãã ãããã£ãŠãããŠã³ããŒãäžã«è¡šç€ºããããã¹ãŠã®ãšã©ãŒã¯æ°ä»ãããŸããã ãã³ãã¬ãŒãå ã®ã³ãŒãã¯ã¡ã€ã³ã®JSã³ãŒãã®åã«å®è¡ãããããããã³ãã¬ãŒãã«ã¯ãã®ãããªåé¡ã¯ãããŸããã
ãã³ãã¬ãŒããè¿œå ãããšããã¹ãŠã®ãšã©ãŒãerrorObjãªããžã§ã¯ãã«åéããå§ããã°ããŒãã«ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããã ãããŠãexecuteã³ãã³ãã䜿çšã§ããããã«ãªããŸããã errorObj.getErrorsïŒïŒãå®è¡ããã¡ãœãããSeleniumãã¬ãŒã ã¯ãŒã¯ã«è¿œå ããŸãããã€ãŸããerrorObjã«å°éãããã¹ãŠã®ãšã©ãŒãåãåããSeleniumãã¹ãèªäœã®åŽã§ä¿åããŸããã
PHPã§Seleniumãã¹ããäœæããŠããããšãæãåºãããŠãã ããã ãšã©ãŒåéã³ãŒãã¯æ¬¡ã®ãããªãã®ã§ãã
public function collectJsErrors() { $return_errorObj = /** @lang JavaScript */ 'if (typeof errorObj !== "undefined") {return errorObj.getErrors();} else {return null;}'; $js_result = $this->execute($return_errorObj)->sync(); foreach ($js_result as $result) { $current_stacktrace = $result; //check if an error is known foreach (self::$known_js_errors as $known_error) { if (strpos($current_stacktrace, $known_error) !== false) { continue 2; } } //check if the error already caught foreach ($this->getJsErrors() as $error) { $existed_stacktrace = $error['error']; if ($current_stacktrace == $existed_stacktrace) { continue 2; } } //collect an error $this->addJsError([ 'error' => $result, 'location' => $this->getLocation(), ]); } }
errorObj JSãªããžã§ã¯ããããšã©ãŒãååŸãããããããåŠçããŸãã
ããã€ãã®ãšã©ãŒã¯ãã§ã«ããã£ãŠããŸãã 圌ãã¯ãããžã§ã¯ãã«åå ããŠããããã§ã«ä¿®æ£ããã»ã¹ã«ãããããå®éšå®€ãæ¡ä»¶ã§ã®ã¿è€è£œãããŠããããšãç¥ã£ãŠããŸãã ããšãã°ããã¹ããŠãŒã¶ãŒã«ã®ã¿è¡šç€ºããããã¹ãçšã«æºåããæ¹æ³ã«é¢é£ãããšã©ãŒã ãã¹ãã§ã¯ãã®ãããªãšã©ãŒã¯ç¡èŠããŸãã
ãã¹ãäžã«åããšã©ãŒã2åç®ã«çºçããå Žåããããç¡èŠããŸã-ãŠããŒã¯ãªãšã©ãŒã®ã¿ã«é¢å¿ããããŸãã
æ°ãããšã©ãŒããšã«ãURLãè¿œå ãããã¹ãŠã®æ å ±ãé åã«æ ŒçŽããŸãã
ãµã€ãã§ã®åã¢ã¯ã·ã§ã³ã®åŸã«collectJsErrorsïŒïŒã¡ãœãããåŒã³åºããŸããããŒãžãéããèŠçŽ ãåŸ æ©ããŠã¯ãªãã¯ãããããŒã¿ãå ¥åãããªã©ã§ãã ã€ã³ã¿ãŒãã§ãŒã¹ãšã©ã®ããã«ããåãããŠãããã®ã¢ã¯ã·ã§ã³ããšã©ãŒãåŒãèµ·ãããªãããšã確èªããå¿ èŠããããŸãã
ãšã©ãŒãåéãããé åã¯ãtearDownïŒïŒã§ãã¹ãã®æåŸã«ã®ã¿ãã§ãã¯ããŸãã çµå±ããšã©ãŒãäœããã®åœ¢ã§ãŠãŒã¶ãŒã«åœ±é¿ãäžããå Žåããã¹ãã¯å€±æããŸãã ããã§ãªãå Žåã¯ãããã«ãã¹ããããããããã®ãæªããããæåã«ã¹ã¯ãªãããæåŸãŸã§ç¢ºèªããå¿ èŠããããŸãã çªç¶ããã®ãšã©ãŒã®èåŸã«ãã£ãšæ·±å»ãªåé¡ããããŸãã
ãããã£ãŠãã¯ã©ã€ã¢ã³ãã®ãšã©ãŒããã£ããããããã«Seleniumãã¹ããæããããšãã§ããŸããã ãŸãããšã©ãŒèªäœãåçŸãããããªããã©ã®ãã¹ãã§ãšã©ãŒãæ€åºãããããããããŸããã
ã¬ã€ã¢ãŠããã§ãã¯
Seleniumãã¹ãèªäœã¯ãã¬ã€ã¢ãŠãããã¹ãããããã«ã¯èšèšãããŠããŸããã ãã¡ããã察話ããå¿ èŠã®ããèŠçŽ ãèŠããªãããå¥ã®èŠçŽ ã«ãã£ãŠé ãããŠããå Žåããã¹ãã¯ããã«ã€ããŠãæããŠããããŸãã ãã®Seleniumã¯ãã®ãŸãŸäœ¿çšã§ããŸãã ãããããã¿ã³ãã©ããäžã«ç§»åããŠèŠãç®ãæªããªã£ãå Žåãã»ã¬ã³ãã¹ãå šäœã¯åé¡ã§ã¯ãããŸããããã®ã¿ã¹ã¯ã¯ã¯ãªãã¯ããããšã§ã...
ããã«ãããããããåãªãªãŒã¹ã®åã«æåã§ã¬ã€ã¢ãŠãã確èªããããšã¯ïŒããšãã°ããã¹ã¯ãããWebã®å Žåã1æ¥ããã2ã€ãããŸãïŒãåããŒãžãåãã©ãŠã¶ã§ãé·ãæéãããããŸãã ç¹°ãè¿ãã«ãªããŸããã人çèŠå ãä»å ¥ããå¯èœæ§ããããŸããç®ãããŒããããäœããå¿ããããšããããŸã...ãã®ããã»ã¹ãäœããã®åœ¢ã§èªååããå¿ èŠããããŸãã
ãŸããåççšã®ã·ã³ãã«ãªã¹ãã¬ãŒãžãäœæããŸããã POSTãªã¯ãšã¹ãã«ããããªãªãŒã¹ã®è¿œå ããŒãžã§ã³ã瀺ãã¹ã¯ãªãŒã³ã·ã§ãããéä¿¡ããããšãã§ãããªãªãŒã¹ã®ããŒãžã§ã³ã瀺ãGETãªã¯ãšã¹ãã«ããããã®ãªãªãŒã¹ã«é¢é£ãããã¹ãŠã®ã¹ã¯ãªãŒã³ã·ã§ãããååŸã§ããŸãã
次ã«ãSeleniumã®ãã¹ããäœæããŠãé¢å¿ã®ãããã¹ãŠã®ãã©ãŠã¶ãŒã衚瀺ãããã®äžã§ãé¢å¿ã®ãããã¹ãŠã®ããŒãžããããã¢ããããªãŒããŒã¬ã€ãªã©ãéããŸããã åå Žæã§ã圌ãã¯ããŒãžã®ã¹ã¯ãªãŒã³ã·ã§ãããæ®ããããããã®ã¹ãã¢ã«éããŸããã
ã¹ãã¬ãŒãžã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããšããã¹ãŠã®ã¹ã¯ãªãŒã³ã·ã§ãããæåã§ãã°ããã¹ã¯ããŒã«ãããã¹ãŠã®ãã©ãŠã¶ãŒã§ãã¹ãŠã®ããŒãžãé©åã«è¡šç€ºãããããã«ããããšãã§ããŸãã ãã¡ããããã®ããã«å°ããªãã°ãèŠã€ããããšã¯å°é£ã§ãã ããããã¬ã€ã¢ãŠããå€§å¹ ã«å£ããå Žåãããã«ç®ãåŒããŸããã ãããã«ãããã¹ã¯ãªãŒã³ã·ã§ããã®å転ã¯ããã¹ãŠã®ãã©ãŠã¶ã§ãµã€ããæã§ã¯ãªãã¯ãããããéããŠç°¡åã§ãã
æåã¯ãå€ãã®ã¹ã¯ãªãŒã³ã·ã§ããããããŸããã§ããã ãããããã°ããããŠããããµã€ãäžã®ããŒãžãããã¯ããã«å€ãã®éžæè¢ãããã¬ã¿ãŒããã¹ããããã£ãã®ã§ãã
æçŽã®ã¹ã¯ãªãŒã³ã·ã§ãããååŸããã«ã¯ãããã€ãã®ããªãã¯ã«é Œããªããã°ãªããŸããã§ããã å®éããã¹ãã§çæãããã¬ã¿ãŒã®HTMLãååŸããããšã¯ãå®éã®ã¡ãŒã«ãµãŒãã¹ã«ç§»åãããããã¯ããã«ç°¡åã§ããïŒãããŠãç§ãã¡ã¯ãŸã Seleniumãã¹ãã«ã€ããŠè©±ããŠããïŒãããã§å¿ èŠãªã¬ã¿ãŒãèŠã€ãããããéããŠãã¹ã¯ãªãŒã³ã·ã§ãããæ®ã£ãŠããŸãã HTMLæåããããã¯ãã¢ãã䜿çšããŠç§ãã¡ã®åŽã§åä¿¡ã§ããããã§ãïŒç¹å®ã®ãŠãŒã¶ãŒã«é¢ããããŒã¿ãåä¿¡ããç°¡åãªcURLãªã¯ãšã¹ãã䜿çšããŠãã¹ããŠãŒã¶ãŒã®ãã¹ãç°å¢ã§æäœã§ããQaAPIããŒã«ããããŸãïŒã ãããããµãŒãããŒãã£ãµãŒãã¹ã®å Žåããã±ãŒã¿ãŒãã¡ãœãããªã©ã®ããŒãžãªããžã§ã¯ããèšè¿°ãå®å®åãããã³ãµããŒãããå¿ èŠããããŸãã
ã»ãšãã©ãã¹ãŠã®é»åã¡ãŒã«ã¯ã©ã€ã¢ã³ãããã裞ã®ãHTMLã§è¡šç€ºãããã®ãšã¯å°ãç°ãªãæ¹æ³ã§æåã衚瀺ããããšã¯æããã§ãã ããããã¬ã€ã¢ãŠãã®ããã€ãã®é倧ãªãšã©ãŒã¯ãæèããå€ããŠæåã®å€èŠ³ãå£ããŠããŸããããæ£åžžã«ãã£ãããããŸãã
ããããçµæã®HTMLãã©ãããã°ããã§ããããïŒ ãã¹ãŠã®ãã©ãŠã¶ã§æ£ãã衚瀺ãããããã«ããæ¹æ³ã¯ïŒ ããã¯éåžžã«ç°¡åã§ããã ã³ã¬ã¯ã¿ãŒã«ã¯ç©ºã®ããŒãžããããSeleniumãã¹ãã§ç°¡åãªå®è¡ãå®è¡ã§ããŸãã
public function drawMailHTML(string $html) { $js = /** @lang JavaScript */ 'document.write("{HTML}")'; $js = str_replace('{HTML}', $html, $js); $this->execute($js)->sync(); }
é©åãªãã©ãŠã¶ã§ãããè¡ããšãHTMLãã©ã®ããã«è¡šç€ºããããã確èªã§ããŸãã ã¹ã¯ãªãŒã³ã·ã§ãããæ®ã£ãŠåãã³ã¬ã¯ã¿ãŒã«éä¿¡ããã ãã§ãã
ãããè¡ãããåŸãã¹ã¯ãªãŒã³ã·ã§ããããããããããŸããã ãããŠããããã1æ¥ã«2åæåã§ãã§ãã¯ããããšã¯æ¬åœã«é£ãããªã£ãŠããŸãã
ãã®åé¡ã解決ããã«ã¯ããã¯ã»ã«ããšã®åçã®åçŽãªæ¯èŒã«é Œãããšãã§ããŸãã ãã®å Žåããããžã§ã¯ãã«ãããã¹ãŠã®å€æ°ãèæ ®ããå¿ èŠããããŸãã ããšãã°ãæåã®ããäŸã§ã¯ããŠãŒã¶ãŒåãšåœŒã®åçã«ãªããŸãã ãã®å Žåãã¹ã¯ãªãŒã³ã·ã§ãããæ®ãåã«ãHTMLãå°ãä¿®æ£ããŠãåçãšååãããã©ã«ãã®ãã®ã«çœ®ãæããå¿ èŠããããŸãã ãŸãã¯ãåãååãšåçãæã€ãŠãŒã¶ãŒåãã®ã¬ã¿ãŒãçæããŸãã :)
äžè²«æ§ã®äœãã³ã³ãã³ãã®å Žåããã®ãããªæäœãã¯ããã«å€ããªããŸãã
次ã«ãäžäžèŽãã¯ã»ã«ã®æ°ãååŸããå€æŽãã©ãã»ã©éèŠã§ããããçµè«ä»ããããšãã§ããŸãã åç §ãŸãŒã³ãšäžèŽããªããŸãŒã³ããã§ãã¯ç»åã«ããŒã¯ããããšã«ãããå·®åãäœæã§ããŸãã
PHPã§ã¯ã ImageMagickã©ã€ãã©ãªã¯ãããã®ç®çã«æé©ã§ãã ãŸãããã®ãããªãã¹ãã¯JavaScriptéçºè ã«ãã£ãŠäœæããã Resemble.jsã䜿çšããŸã ã
äŸãšããŠãBadooãã°ã€ã³ããŒãžã«ã€ããŠèããŸãã
äœããã®çç±ã§ããç§ãèšæ¶ããããã§ãã¯ããã¯ã¹ã倱ããããšããŸãã ãã®ãããéä¿¡ãã¿ã³ã¯ãããã«é«ããªããŸããã å·®åã¯æ¬¡ã®ããã«ãªããŸãã
ãã®å³ã§ã¯ããã€ãªã¬ããã¯ãåç §ã¹ã¯ãªãŒã³ã·ã§ãããšèŠçŽ ãæ¬ èœããŠããã¹ã¯ãªãŒã³ã·ã§ãããšã®äžäžèŽã瀺ããŠããŸãã æ£ç¢ºã«äœãééã£ãŠããããããã«ããããŸãã
æ¯èŒã·ã¹ãã ã¯éèŠãªãã¯ã»ã«æ°ã«èšå®ã§ããŸãã1ã€ã®ã¹ã¯ãªãŒã³ã·ã§ããããã®æ°ãè¶ ããŠããªãå Žåã¯ããã¹ãŠãæ£åžžã§ãããšããéç¥ãéä¿¡ã§ããŸãã ããã€ãã®ã¹ã¯ãªãŒã³ã·ã§ãããå€§å¹ ã«ç°ãªãããã«ãªã£ãå Žå-ã¢ã©ãŒã ãæã€...
ãããã£ãŠãã¹ã¯ãªãŒã³ã·ã§ãããæåã§ç¢ºèªããããšãå¿ããŠãæ¬åœã«æ³šç®ã«å€ãããã®ã ããèŠãããšãã§ããŸãã
ã¯ã©ã€ã¢ã³ããšAPIã®çžäºäœçšã確èªãã
Badooã§ã¯ããã¹ãŠã®ã¯ã©ã€ã¢ã³ãïŒãã¹ã¯ãããWebãã¢ãã€ã«WebãAndroidããã³iOSã¢ããªã±ãŒã·ã§ã³ïŒã¯ãç¹å®ã®HTTPããŒã¹ã®APIã䜿çšããŠãµãŒããŒãšéä¿¡ããŸãã ãã®ã¢ãããŒãã«ã¯ããã€ãã®å©ç¹ããããŸãã ããšãã°ãã¯ã©ã€ã¢ã³ããšãµãŒããŒã䞊è¡ããŠéçºããæ¹ãã¯ããã«ç°¡åã§ãã
ãã ãããšã©ãŒã®äœå°ããããŸãã ãã°ãŸãã¯äžè¬çã«èª€ã£ãŠèããããã¢ãŒããã¯ãã£ãåå ã§ãã¯ã©ã€ã¢ã³ããæ¬æ¥ãããé »ç¹ã«ãµãŒããŒã«ã¢ã¯ã»ã¹ããå¯èœæ§ããããŸãã ãã®å Žåãããããäœããæ£ããåäœããªãããšã¯èšããŸã§ããªããäœåãªè² è·ãäœæãããŸãã
éçºããã¹ãã®æ®µéã§ããã®ãããªããšãç£èŠããããã«ãSeleniumãã¹ãã䜿çšããŸãã ãããã®ãã¹ãã®æåã«ããããã€ã¹IDããšããCookieãçæããŸãã ãã®å€ããµãŒããŒã«æž¡ããŸãããµãŒããŒã¯ããã®ãããã€ã¹IDãã«å¯ŸããŠããµãŒããŒã«éä¿¡ããããã¹ãŠã®APIãªã¯ãšã¹ãã®èšé²ãéå§ããŸãã
ãã®åŸããã¹ãèªäœãå®è¡ãããããŒãžãéããçžäºã«æžã蟌ããªã©ã®ç¹å®ã®ã·ããªãªãå®è¡ããŸãã ãã®éããµãŒããŒã¯ãªã¯ãšã¹ããã«ãŠã³ãããŸãã
ãã¹ãã®æåŸã«ããµãŒããŒã«èšé²ãåæ¢ããä¿¡å·ãéä¿¡ããŸãã ãµãŒããŒã¯ç¹å¥ãªãã°ãçæããŸããããã«ãããäœæããããªã¯ãšã¹ãã®çš®é¡ã®æ°ãææ¡ã§ããŸãã ãã®éãåºæºããNããŒã»ã³ããè¶ ããŠéžè±ãããšãç¹å¥ãªéç¥ãèªåãã¹ã¿ãŒã«ââå±ããç¶æ³ãç解ãå§ããŸãã ãã®åäœãäºæãããå ŽåããããŸãïŒããšãã°ããµã€ãã®æ°ããæ©èœã«é¢é£ä»ããããæ°ãããªã¯ãšã¹ãã衚瀺ãããå ŽåïŒ-åç §å€ã調æŽããŸãã ãŸããã¯ã©ã€ã¢ã³ãã誀ã£ãŠäžèŠãªãªã¯ãšã¹ããäœæããããšãå€æããå Žåãããããããä¿®æ£ããå¿ èŠããããŸãã
ã¯ã©ã€ã¢ã³ãã®æ°ããããŒãžã§ã³ããŠãŒã¶ãŒã«å±ãåã«ãã¹ããŒãžã³ã°ã§ãã®ãããªãã¹ããå®è¡ããŸãã èŠèŠçã«ã¯ããªãªãŒã¹ããšã®ãªã¯ãšã¹ãæ°ã®æ¯èŒã¯æ¬¡ã®ããã«ãªããŸãã
åè²ã¯ãç¹å®ã®çš®é¡ã®ãªã¯ãšã¹ãã瀺ããŠããŸãã ãªã¯ãšã¹ããããé »ç¹ã«ç¹°ãè¿ãããããã«ãªã£ãå ŽåãèŠèŠçã«é¡èã«ãªããŸãã ãã®å Žåãç¹å¥ãªéç¥ããããŸãã®ã§ãåãªãªãŒã¹ã®åã«çµ±èšã確èªããå¿ èŠã¯ãããŸããã
ãµãŒããŒãã°
ãµãŒããŒãã°ã®ãšã©ãŒã«è¿ éã«å¯ŸåŠããããã«ãåæ§ã®ããªãã¯ã䜿çšããŸãã ã¹ããŒãžã³ã°ã«æ°ãããšã©ãŒã衚瀺ããããšãããããåçŸããæ¹æ³ãšãã©ã®ãã±ããã衚瀺ãããã®ããåžžã«æ確ã§ã¯ãããŸããã
Seleniumãã¹ãã®æåã«ãç¹å¥ãªCookieãtestnameããäœæãããããã«çŸåšã®ãã¹ãã®ååãæž¡ãããŸãã ãããã£ãŠãèªåãã¹ãäžã«ãµãŒããŒã§ãšã©ãŒãçºçããå Žåãåçã·ããªãªãããã£ãŠãããããã»ãšãã©ã®å ŽåããããåçŸããæ¹ãç°¡åã§ãã ãšã©ãŒããªãªãŒã¹ã«æ¥ãã¿ã¹ã¯ãèŠã€ããã«ã¯ããªãªãŒã¹ãããŠãããã¹ãŠã®ã¿ã¹ã¯ã§Seleniumãã¹ããå®è¡ãããã®ãã°ã確èªããŸãã
ãã®ããã»ã¹ãèªååããŸãããããã«ã€ããŠã¯ä»¥åã®èšäºã§æžããŸããã
äžè¬ã«ããã®ã¢ãããŒãã«ããããªãªãŒã¹å ã®ãµãŒããŒãšã©ãŒãè¿ éã«åŠçããããŒã«ã©ã€ãºã§ããŸãã
éææ¥ã®å€ã®èªåãã¶æ³šæ
ãããŠãå®éã«ã¯ããªãã§ããïŒ :)
ãŸãšã
Seleniumã¯ããã©ãŠã¶ãŒãæäœããããã®ããŒã«ã§ãã ãããŠããŸãã«ãã®æ¹æ³ãšçç±ã¯ããã®ããŒã«ã䜿çšããŠæ±ºå®ãã人次第ã§ãã è³¢ãããããšã§ã人çãå€§å¹ ã«æ¥œã«ããããšãã§ããŸãã
ãã¡ãããããã€ãã®ã¿ã€ãã®ãã§ãã¯ã«ã¯ãããé©åãªããŒã«ããããŸãã ããšãã°ãSeleniumã¯ãcURLã©ã€ãã©ãªãªã©ã«èšè¿°ãããè匱æ§ã¹ãã£ããŒãé«éããŒãµãŒãå®å šã«çœ®ãæããããšã¯ã§ããŸããã ãŸããè² è·ãã¹ãã«äœ¿çšããã®ã¯ããªãå¥åŠã§ãããã®å ŽåãæŠéã¢ããªã±ãŒã·ã§ã³ãããSeleniumãã¡ãŒã ã®ãã©ãŒã«ããã¬ã©ã³ã¹ããã§ãã¯ããå¯èœæ§ãé«ããªããŸãã :)
ãã ããSeleniumãåªããŠããç¹å®ã®ã¿ã¹ã¯ã»ããããããŸãã ç§ã¯åœŒãã©ã®ããã«ç§ãã¡ãå©ãããã«ã€ããŠè©±ããŸããã ç§ã¯ããªãã®äŒç€Ÿã§ã»ã¬ã³ã䜿çšããèå³æ·±ãæ¹æ³ã«ã€ããŠèããŠããããã§ãã
ãæž èŽããããšãããããŸããã