zoukankan      html  css  js  c++  java
  • 91家纺网,登录代码

    import re
    import os
    import base64
    #import ast
    from urllib import parse
    from datetime import datetime
    import cv2

    import random 
    import requests
    import time
    import redis
    from scrapy import Selector

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from PIL import Image

    domain = "http://www.91jf.com/"
    domain_log = "http://www.91jf.com/default.php?url=member&act=memberinfo"
    #IMAGE_URL = "http://www.91jf.com/default.php?act=code"

    chrome_options = webdriver.ChromeOptions()
    path = r'D:project_91jiafangwanchromedriver.exe'
    browser = webdriver.Chrome(executable_path=path, chrome_options=chrome_options)


    def get_captcha(filename):
        """
        访问验证码解析API,解析图片验证码
        :param filename:
        :return:
        """
        CAPTCHA_PATH = 'http://192.168.3.9:8888/captcha'
        with open(filename, "rb") as f:
            image_base64 = base64.b64encode(f.read())
        payload = {'image': image_base64}
        while True:
            response = requests.request("POST", CAPTCHA_PATH, data=payload)
            if response.status_code == 200:
                if response.json().get('code') == 200:
                    return response.json().get('text')
                else:
                    print(response.json().get('err'))
                    return '1234'
            else:
                print('验证码网络无法访问,请确认网络情况')
                time.sleep(10)

    def log_in():
        browser.get(domain_log)
        browser.maximize_window()

        slider = browser.find_element_by_xpath("//img[@onclick='show_user_login()']")
        ActionChains(browser).click(slider).perform()
        ActionChains(browser).release().perform()

        #IMAGE_URL = "http://www.91jf.com/default.php?act=code"
        # 截取当前网页并放到D盘下命名为printscreen,该网页有我们需要的验证码
        browser.save_screenshot('./image/printscreen.png') 
        img_ele = browser.find_element_by_xpath("//img[@src='default.php?act=code']")
        location = img_ele.location  # 获取验证码x,y轴坐标
        size = img_ele.size  # 获取验证码的长宽
        rangle = (int(location['x']), int(location['y']), int(location['x'] + size['width']),
              int(location['y'] + size['height']))  # 写成我们需要截取的位置坐标
        i = Image.open("./image/printscreen.png")  # 打开截图
        frame4 = i.crop(rangle)  # 使用Image的crop函数,从截图中再次截取我们需要的区域
        frame4 = frame4.convert('RGB')
        frame4.save('./image/save.jpg') # 保存我们接下来的验证码图片 进行打码

        username = "18206275210"
        password = "czx0711."

        username_ele = browser.find_element_by_xpath("//input[@name='username']")
        password_ele = browser.find_element_by_xpath("//input[@name='password']")

        username_ele.send_keys(username)
        password_ele.send_keys(password)

        time.sleep(2)
        #request_download(IMAGE_URL)

        image = cv2.imread('./image/save.jpg')
        cv2.imshow("image",image)
        cv2.waitKey(0)
        
        pic = get_captcha('./image/save.jpg')
        pic_ele = browser.find_element_by_xpath("//input[@name='t_code']")
        pic_ele.send_keys(pic)
        
        time.sleep(2)

        slider = browser.find_element_by_xpath("//div[@class='login_but']")
        ActionChains(browser).click(slider).perform()
        ActionChains(browser).release().perform()


    def request_download(IMAGE_URL):
        os.makedirs('./image/', exist_ok=True)
        import requests
        r = requests.get(IMAGE_URL)
        with open('./image/img'+ '0' + '.jpg', 'wb') as f:
            f.write(r.content) 
    '''
    for i in range(1000):
        request_download(str(i))
        time.sleep(random.randint(1,4))
        '''
    log_in()

    '''
    image = cv2.imread('./image/img0.jpg')
    cv2.imshow("image",image)
    cv2.waitKey(0)
    '''
  • 相关阅读:
    Angular $http解析通过接口获得的json数据
    Python基础(十四)—装饰器 wrapper
    Python基础(十二)—面向对象拾遗(__slots__、@property、枚举类、元类)
    Python基础(十三)—切片、yield、生成器、序列化JSON
    Python基础(十一)—魔法方法(构造析构、属性魔法、算数魔法、类型魔法等)
    Python基础(十)—面向对象的深入讲解(继承、Mixin编程机制等)
    Python基础(九)—异常except、else&with、异常的名称层次
    Python基础(八)—编码详解(ASCII、GBK、Unicode、UTF-8等)、decode&encode
    Python基础(七)—输入输出(open、os、pickle)
    Python基础(六)—函数式编程(内部函数、闭包、lambda、filter/map/reduce/sorce、偏函数)
  • 原文地址:https://www.cnblogs.com/dog-and-cat/p/13321163.html
Copyright © 2011-2022 走看看