python 滑动验证码_python易盾滑动验证码

fromselenium import webdriverfromselenium.webdriver.chrome.options import Optionsfromselenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions asECfromselenium.webdriver.common.by import Byfromselenium.webdriver.common.action_chains import ActionChains

import timefromimage_match import distancefromimage_match import get_tracksfromimage_match import getSlideInstanceclass yiDundriver(object):

def __init__(self, url, prt='', time2wait=10):

ex_path= 'C:\Program Files\Google\Chrome\Application\chromedriver.exe'chrome_options=Options()

# chrome_options.add_argument("--proxy-server=http://%s" %prt)

chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug

chrome_options.add_argument('disable-infobars')

self.browser= webdriver.Chrome(executable_path= ex_path, chrome_options=chrome_options)

self.browser.set_window_size(500,800)

self.browser.implicitly_wait(10)

self.browser.get(url)

self.wait=WebDriverWait(self.browser, time2wait)

def __clickVerifyBtn(self):

verify_btn= self.wait.until(EC.element_to_be_clickable((By.ID, "btnCertificationpone")))

verify_btn.click()

def __slideVerifyCode(self):

slider= self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'yidun_slider')))

ActionChains(self.browser).click_and_hold(slider).perform()

slider_loc_x= slider.location["x"]

img= self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, "yidun_bg-img")))

icon= self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, "yidun_jigsaw")))

pic_width= img.size['width']

icon_width= icon.size['width']

img_tags= self.browser.find_elements_by_tag_name("img")

img_url= img_tags[0].get_attribute("src")

icon_url= img_tags[1].get_attribute("src")

match_x=distance(img_url, icon_url, pic_width)if match_x == -1:

raise Exception()

slider_instance=getSlideInstance(pic_width, icon_width, match_x)

tracks=get_tracks(slider_instance)for track intracks:

ActionChains(self.browser).move_by_offset(xoffset=track, yoffset=0).perform()else:

ActionChains(self.browser).move_by_offset(xoffset=3, yoffset=0).perform()

ActionChains(self.browser).move_by_offset(xoffset=-3, yoffset=0).perform()

time.sleep(0.5)

ActionChains(self.browser).release().perform()

time.sleep(3)

cur_loc_x= slider.location["x"]if cur_loc_x >slider_loc_x:

print("success")returnTrueelse:returnFalse

def verifySlideCode(self,attempt_times=10):

#尝试attempt_times次滑动验证,返回是否验证通过

self.wait.until(EC.text_to_be_present_in_element((By.CLASS_NAME,"yidun_tips__text"), r"向右拖动滑块填充拼图"))for attempt inrange(attempt_times):try:ifself.__slideVerifyCode():returnTrue

except Exceptionase:

print(e)

ActionChains(self.browser).release().perform()

refresh= self.wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "yidun_refresh")))

refresh.click()

time.sleep(0.6)returnFalseif __name__ == '__main__':

drv= yiDundriver('http://dun.163.com/trial/jigsaw-wap')

drv.verifySlideCode()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值