UIオートメーションは、自動的にログインスライドパズルコードを検証します

UIいつクリックして、それを保持し、消えるマウスを放し、背景画像の干渉を取得するためにパズルの必要性のパズルログイン検証コード、確認コードをスライドさせるための自動化につながる不十分な認識精度率が、缶

  。1つの は/ usr / binに/ PythonのENV!
  2  - * -コーディング:UTF-8 - * - 
  3。  @time:2019年11月15日夜02時32分
  。4  @Site:
  5  @file:puzzleCaptcha.py 
  。6  @Software:PyCharm 
  7  
  8  インポートOS
   9  インポートCV2
 10  インポート時間
 11  から PIL インポートイメージ
 12  ページデータ上の記憶素子から-created SiteTest.datas.data_Filesインポートするためのパッケージ変更*#
13  から selenium.webdriver インポートActionChains
14  から selenium.webdriver.common.by インポートすることにより
 15  
16パス= (os.path.dirname(os.getcwd()))とos.path.abspath
 。17  
18である クラス:puzzleCaptcha()
 19。     DEF  __init__ (自己):
 20である、 
21は         定数およびデータローディング素子
22がさ          self.data = DATAS()#は、データ要素に基づいて分類することができる経路記憶された
 23である          self.data = 使用されたパラメータが要求される必要なデータ、インスタンス化self.Data.puzzleCaptchaData()メソッド#作成された実際のデータファイルに応じた値のself.data ****。
 24  
25      DEFの analog_drag(セルフ、ドライバー、距離、bgImagePath、sliderImagePath): スライディングプロセス
26         「」 " 
27の         スライディングプロセス
 28          :PARAMドライバー:ブラウザ
 29          :からのparam距離スライダーをスライド
 30          :PARAM bgImagePath関数pic_getは()パス保存背景画像を取得する
 31          のパスの保存画像を取得するためのparam sliderImagePath関数pic_get()スライダー:
 32          :リターン:図の背景およびスライダー
 33は         " "" 
34は、         time.sleep#遅い負荷要素がbuttonDrag見つからない防ぐ(1)
35          buttonDrag = driver.find_element(By.XPATH、self.data.buttonDrag_xpath)
 36          ActionChainsを(buttonDrag).move_by_offset .click_and_hold(ドライバ)(距離、0).perform()
 37          time.sleepは(1) 、その後マウスを解放滞留1S後に指定された距離を移動する
38         ActionChains(ドライバ).release(buttonDrag).perform()
 39          フラグ= self.ifElementExist(ドライバ、By.XPATH、self.data.succes_xpath)
 40          一方TRUE:
 41              であればフラグ== FALSE: 拼图不成功一直重试
42                  time.sleep(0.5)
43                  driver.refresh()
 44                  self.pic_get(ドライバ、bgImagePath、sliderImagePath)
 45                  distance01 = self.move_Distance(bgImagePath、sliderImagePath)
 46                  self.analog_drag(ドライバ、distance01、bgImagePath、sliderImagePath)
 47              着陸後、アカウントのパスワードとパズルの成功を入力します。
48                  time.sleep(0.5)
49                  driver.find_element_by_class_name(self.data.userName_class).send_keys(self.data.userName)
 50                  driver.find_element(By.XPATH、self.data.pwd_xpathを).send_keys(self.data.pwd)
 51である                 driver.find_element(By.XPATH、self.data.btnLogin_xpath).click()
 52は、             BREAK 
53である          (time.sleep。1) 容易要素見つけるために
54である 
55      DEF ifElementExist(セルフ、ドライバ、メソッド,, elementPath):
 56          「」 " 
57          見つける要素があるかどうかを決定するために
 58          :PARAMドライバ:ブラウザ
 59         :PARAM方法:検索要素法(By.XPATH、By.CLASS_NAME、By.LINK_TEXT、By.ID 、By.NAME 等)
 60          :PARAM elementPath:HTMLのパス要素
 61は         :リターン:背景スライダ及び図。
 62          「」 " 
63          試し64-              time.sleepは、(1) は、パズルの成功につながる要素を見つけることができない、あまりにも遅いページが読み込まれるのを防ぐ際にフラグ== Falseの
65              driver.find_element(方法,, elementPath)
 66              フラッグ= 67          を除い68              =内のフラグ69          リターンフラグに
 70  
71である     DEFのpic_get(セルフ、ドライバ、bgImagePath、sliderImagePath):
 72         "" " 
73          取得する画像パズル
 74          :PARAMドライバ:ブラウザ
 75          :PARAM bgImagePath:背景画像
 76          :PARAM liderImagePath:画像スライダー
 77          :リターン:背景スライダと、図
 78          " "" 
79          time.sleepを(1 80          buttonDrag = driver.find_element(By.XPATH、self.data.buttonDrag_xpath)
 81          ActionChains(ドライバ).click_and_hold(buttonDrag).perform()
 82  
83          bgImage = driver.find_element(By.XPATH、self.data.bgPic_xpath) 背景画像取得要素
84          driver.save_screenshot(bgImagePath)
 85         印刷bgImage.location 
86          プリント(bgImage.size)
87          left_bg = bgImage.location [ ' X ' ]
 88          top_bg = bgImage.location [ ' Y ' ]
 89          right_bg = bgImage.location [ ' X ' ] + bgImage.size 【' ' ]
 90          bottom_bg = bgImage.location [ ' Y ' ] + bgImage.size [ ' ' ]
 91          im_bg = Image.open(bgImagePath)
 92         im_bg = im_bg.crop((left_bg、top_bg、right_bg、bottom_bg))
 93          im_bg.save(bgImagePath)
 94          self.change_bgImage(bgImagePath)
 95  
96          sliderImage = driver.find_element(By.XPATH、self.data.sliderPic_xpath) 滑块图片元素获取
97          driver.save_screenshot(sliderImagePath)
 98          プリントsliderImage.location 
99          プリント(sliderImage.size)
100          left_slider = sliderImage.location [ ' X ' ]
 101          top_slider = sliderImage.location [ ' Y ' ]
102          right_slider = sliderImage.location [ ' X ' ] + sliderImage.size [ ' ' ]
 103          bottom_slider = sliderImage.location [ ' Y ' ] + sliderImage.size [ ' ' ]
 104          im_slider = Image.open(sliderImagePath)
 105          im_slider = im_slider.crop((left_slider、top_slider、right_slider、bottom_slider))
 106          im_slider.save(sliderImagePath)
 107          プリント(im_bg、im_slider)
108          戻りim_slider、im_bg
109  
110      DEF change_bgImage(セルフ、bgImagePath):クリック#選択は、パズルに有用で表示され、
 111          "" " 
112          カバー関数pic_get()背景画像スライダー突起取得
 113          :PARAM bgImagePath関数pic_get()はバックグラウンドを取得します保存画像パス
 114          :リターン:図背景およびスライダー
 115          "" " 
1 16          IMG = cv2.imread(bgImagePath)
 117          IMG2 IMG = [0:150,65:120 ]
 1 18          IMG [0:150,10:65] = IMG2
 119          cv2.imwrite(bgImagePath、IMG)
 120  
121      DEF move_Distance(セルフ、bgImagePath、sliderImagePath):
 122          "" "
123          画像の最良のマッチング位置を見つけます
124          :PARAM標的:バックグラウンドすなわちターゲット
 125          :PARAMテンプレート:見つけるテンプレート図、すなわち必要
 126          :リターン:最良一致を返し、座標対応最悪マッチング
 127          「」 " 
128          target_rgb = cv2.imread(bgImagePath)
 129          target_gray = cv2.cvtColor(target_rgb、cv2.COLOR_BGR2GRAY)
 130          template_rgb = cv2.imread(sliderImagePath、0)
 131である         。#template_gray = cv2.cvtColor(template_rgb、cv2.COLOR_BGR2GRAY)
132          RES = cv2.matchTemplate(target_gray、template_rgb、CV2 .TM_CCOEFF_NORMED)
 133          値= cv2.minMaxLoc(RES)
 134         値2 =値[3] [0] -10
 135          プリント(値)
136          プリント(値2)
137          戻り値2
 138  
139  もし __name__ == ' __main__ ' 140      puzzleCaptcha()

 

おすすめ

転載: www.cnblogs.com/determined/p/11989896.html