1. 程式人生 > >Selenium實現元素的拖拽(java版)

Selenium實現元素的拖拽(java版)

【前言】

       自從淘寶網登陸頁出現滑塊驗證,很多其他網站也在模仿這個滑塊驗證,在防止機器人惡意註冊方面確實起到一定的作用。

【關於滑塊的原理】:

        響應時間,拖拽速度,時間,位置,軌跡,重試次數等。這些因素能夠構成一個取樣結果或者辨識特性。根據這些特性可以猜測,你是人或者其他東西。或者能夠猜測,你是誰或者什麼東西。猜測結果中會涉及到另一個問題,那就是概率,比如80%的概率是人,那麼就會放行,30%的概率是人,那就會跳轉到更復雜的驗證或者拒絕放行等。閾值的設定就需要仔細研究了。

【滑塊拖動實現過程】:

1,判斷驗證碼在什麼時候出現。

2,驗證碼出現時,判斷何時載入完成。

3,確定驗證碼的位置。

4,用滑鼠模擬拖動驗證碼。

5,檢驗本次操作是否成功


【滑塊實現程式碼範例】:

//新增判斷是否存在滑塊驗證
	  try{
               admcDriver.findElement(By.id("sillerVerifyCode")).click();//sillerVerifyCode為滑塊出現時的id
	       logger.info("滑塊元素已經存在!!!");
	       Actions action = new Actions(admcDriver); 
               //獲取滑動滑塊的標籤元素
	       WebElement source = admcDriver.findElement(By.xpath("//div[@class='dt_child_content']/div[3]"));
               //確保每次拖動的畫素不同,故而使用隨機數
               action.clickAndHold(source).moveByOffset((int)(Math.random()*200)+80, 0);
               Thread.sleep(2000);
               action.clickAndHold(source).moveByOffset((int)(Math.random()*200)+80, 0);
               Thread.sleep(2000);
               action.clickAndHold(source).moveByOffset((int)(Math.random()*200)+80, 0);
               Thread.sleep(2000);
               action.clickAndHold(source).moveByOffset((int)(Math.random()*200)+80, 0);
               Thread.sleep(2000);
               //拖動完釋放滑鼠
               action.moveToElement(source).release();
	       //組織完這些一系列的步驟,然後開始真實執行操作
	       Action actions = action.build();
	       actions.perform();
	      }catch(ElementNotVisibleException e1){
	         logger.info("滑塊元素不存在");	  
	      }