为了账号安全,请及时绑定邮箱和手机立即绑定

python基于selenium+cv2+numpy实现登录某大型电商系统

标签:
Python

首先贴上我的安装包

一、selenium安装

 I.打开pycharm,点击Settings,找到Project Interpreter,点击右边的下拉菜单下的show All...选项

 II.点击show All...选项后,点击框框中的+号

 III.在I步骤的project Interpeter那里选择你加入的python路径,如出现pip、selenium、setuptools模块则代表成功了,可以使用selenium了

    

 

 

二、cv2安装

这个步骤参考了这篇博文:https://blog.csdn.net/u010128736/article/details/52713204

  遵循上步:I. II.

   在I步骤的project Interpeter那里选择你加入的python路径,如出现opencv-python 、cv2wrap模块则代表成功了,可以使用cv2了,这里的坑还是很多啊

三、numpy安装

  遵循上步:I. II.

   在I步骤的project Interpeter那里选择你加入的python路径,如出现numpy模块则代表成功了,可以使用numpy了

 

四:Python+selenium的webdriver打开浏览器进入登录页面

def login(username, password):
    driver.get("https://passport.jd.com/new/login.aspx")
    time.sleep(3)
    driver.find_element_by_link_text("账户登录").click()
    driver.find_element_by_name("loginname").send_keys(username)
    driver.find_element_by_name("nloginpwd").send_keys(password)
    driver.find_element_by_id("loginsubmit").click()    while True:
        time.sleep(3)
        a = get_image_position(True)        if a:           break
    time.sleep(3)
    driver.get("https://cart.jd.com/cart.action")
    time.sleep(3)
    driver.find_element_by_id("toggle-checkboxes_down").click()
    driver.find_element_by_link_text("去结算").click()
    time.sleep(2)
    driver.find_element_by_id("order-submit").click()
    now = datetime.datetime.now()    #now_time = now.strftime('%Y-%m-%d %H:%M:%S')
    print(now.strftime('%Y-%m-%d %H:%M:%S'))    print('login success, you can ou up!')

五:获取图形验证的图片,并滑动滑块实现滑块验证处理

# 获取图形验证的图片,并滑动滑块实现滑块验证处理def get_image_position(flag):    # 获取滑块图片的下载地址
    try:
        image1 = driver.find_element_by_class_name('JDJRV-smallimg').find_element_by_xpath('img').get_attribute('src')    except BaseException:
        flag= True        return flag    # 获取背景大图图片的下载地址
    image2 = driver.find_element_by_class_name('JDJRV-bigimg').find_element_by_xpath('img').get_attribute('src')    # print("image1:", image1)
    # print("image2:", image2)
    if image1 is None or image2 is None:        return

    if driver.find_element_by_class_name('JDJRV-smallimg').is_displayed() is False:        return

    image1_name = 'slide_block.png'  # 滑块图片名
    image2_name = 'slide_bkg.png'  # 背景大图名

    # 下载滑块图片并存储到本地    request.urlretrieve(image1, image1_name)    # 下载背景大图并存储到本地    request.urlretrieve(image2, image2_name)    # 获取图片,并灰化
    block = cv2.imread(image1_name, 0)
    template = cv2.imread(image2_name, 0)    # 二值化之后的图片名称
    block_name = 'block.jpg'
    template_name = 'template.jpg'
    # 将二值化后的图片进行保存    cv2.imwrite(template_name, template)
    cv2.imwrite(block_name, block)
    block = cv2.imread(block_name)
    block = cv2.cvtColor(block, cv2.COLOR_BGR2GRAY)
    block = abs(255 - block)
    cv2.imwrite(block_name, block)

    block = cv2.imread(block_name)
    template = cv2.imread(template_name)    # 获取偏移量
    result = cv2.matchTemplate(block, template, cv2.TM_CCOEFF_NORMED)  # 查找block图片在template中的匹配位置,result是一个矩阵,返回每个点的匹配结果

    x, y = np.unravel_index(result.argmax(), result.shape)   
    # 获取滑块
    element = driver.find_element_by_class_name('JDJRV-slide-inner.JDJRV-slide-btn')    # 滑动滑块
    ActionChains(driver).click_and_hold(on_element=element).perform()    # print("x方向的偏移", int(y * 0.4 + 18), 'x:', x, 'y:', y)
    ActionChains(driver).move_to_element_with_offset(to_element=element, xoffset=y, yoffset=0).perform()    # sleep(1)
    ActionChains(driver).release(on_element=element).perform()
    time.sleep(3)

如果觉得有用请帮我点击star 防丢失哦

 源码 :GitHub

作者:墨飞_Max

原文链接:https://www.cnblogs.com/mophy/p/10164194.html



点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消