Selenium實現元素的拖拽(java版)
阿新 • • 發佈:2019-01-04
【前言】
自從淘寶網登陸頁出現滑塊驗證,很多其他網站也在模仿這個滑塊驗證,在防止機器人惡意註冊方面確實起到一定的作用。
【關於滑塊的原理】:
響應時間,拖拽速度,時間,位置,軌跡,重試次數等。這些因素能夠構成一個取樣結果或者辨識特性。根據這些特性可以猜測,你是人或者其他東西。或者能夠猜測,你是誰或者什麼東西。猜測結果中會涉及到另一個問題,那就是概率,比如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("滑塊元素不存在"); }