青柠学长 2022-08-03 16:52 采纳率: 83.3%
浏览 215
已结题

python实现循环登录不同账号

怎么利用python实现循环登录不同账号?
因为我需要登录不同账号做一件同样的事情 , 做完这些事情后又退出登录 , 切换不同账号登录做同样的事情

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from PIL import Image
import ddddocr
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome() #实例化对象
URL = "XXXXXXXXXXXXXXXXXX"   #我的工作地址

username = ['xxxxxx','xxxxxx']  #储存的是账号
password = ['**********','*******']    #储存的密码


# 打开登录页面
def sta():
    driver.maximize_window()  # 将浏览器最大化
    # 打开地址栏
    driver.get(URL)
    time.sleep(2)  # 等待两秒加载网页


# 将验证码截图并保存
def sav():
    # 1.将注册页面截图保存,这里需要以png结尾,其他图片格式会有warning
    driver.save_screenshot("F:/screenshot/img.png")
    # 2.定位到验证码图片元素
    code_ele = driver.find_element(By.XPATH, "//img[@class='vcode']")
    # 3.得到将元素的具体位置
    x0 = code_ele.location["x"]  # 565
    y0 = code_ele.location["y"]  # 478
    x1 = code_ele.size["width"] + x0
    y1 = code_ele.size["height"] + y0
    img = Image.open("F:/screenshot/img.png")
    image = img.crop((x0, y0, x1, y1))  # 左、上、右、下
    image.save("F:/screenshot/code_img.png")  # 将验证码图片保存为code_img.png


# 调用验证码识别库
def reco():
    ocr = ddddocr.DdddOcr()
    with open("F:/screenshot/code_img.png", 'rb') as f:
        image = f.read()
    res = ocr.classification(image)
    return (res)


# 输入用户信息及验证码
def input1():
    driver.find_element(By.XPATH, '//input[@placeholder="请输入用户名/手机"]').send_keys()  # 输入账号
    driver.find_element(By.XPATH, '//input[@placeholder="请输入密码"]').send_keys()  # 输入密码
    driver.find_element(By.XPATH, '//input[@placeholder="请输入验证码"]').send_keys(reco())  # 输入验证码
    time.sleep(1)
    driver.find_element(By.XPATH, '//button[@type="button"]').click()  # 点击登录
    time.sleep(2)  # 等待跳转至首页


# 判断验证码是否正确
def while_login():
    while True:
        try:
            driver.find_element(By.CLASS_NAME, "eb-sidebar-logo-collapsed")  # 如果找到了首页这个元素则停止循环
            break
        # 若没有找到首页元素标识,则一直循环识别验证码,输入并登录
        except:
            sav()
            reco()
            driver.find_element(By.XPATH, '//input[@placeholder="请输入验证码"]').clear()
            driver.find_element(By.XPATH, '//input[@placeholder="请输入验证码"]').send_keys(reco())
            time.sleep(1)
            driver.find_element(By.XPATH, '//button[@type="button"]').click()
            time.sleep(2)


# 退出登录
def exit_login():
    #   将鼠标悬停在设置图标上
    mouse = driver.find_element(By.XPATH, '//i[@aria-label="图标: setting"]')
    ActionChains(driver).move_to_element(mouse).perform()

    #   点击退出登录
    driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div/div[2]/div/div/div/div[3]/div[4]').click()

    #   等待弹窗加载,确定退出
    time.sleep(2)
    driver.find_element(By.XPATH, '//button[@type="button" and @class="eb-btn eb-btn-primary"]').click()


if __name__ == '__main__':
    sta()
    sav()
    input1()
    while_login()
    exit_login()

driver.close()  # 关闭浏览器
  • 写回答

2条回答 默认 最新

  • herosunly Python领域优质创作者 2022-08-03 17:07
    关注

    大概是这样的,具体一些参数啥的,你自己填下:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    from PIL import Image
    import ddddocr
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    from selenium.webdriver.common.action_chains import ActionChains
     
    URL = "XXXXXXXXXXXXXXXXXX"   #我的工作地址
     
    username = ['xxxxxx','xxxxxx']  #储存的是账号
    password = ['**********','*******']    #储存的密码
     
     
    # 打开登录页面
    def sta():
        driver = webdriver.Chrome() #实例化对象
        driver.maximize_window()  # 将浏览器最大化
        # 打开地址栏
        driver.get(URL)
        time.sleep(2)  # 等待两秒加载网页
        return driver
     
     
    # 将验证码截图并保存
    def sav(driver):
        # 1.将注册页面截图保存,这里需要以png结尾,其他图片格式会有warning
        driver.save_screenshot("F:/screenshot/img.png")
        # 2.定位到验证码图片元素
        code_ele = driver.find_element(By.XPATH, "//img[@class='vcode']")
        # 3.得到将元素的具体位置
        x0 = code_ele.location["x"]  # 565
        y0 = code_ele.location["y"]  # 478
        x1 = code_ele.size["width"] + x0
        y1 = code_ele.size["height"] + y0
        img = Image.open("F:/screenshot/img.png")
        image = img.crop((x0, y0, x1, y1))  # 左、上、右、下
        image.save("F:/screenshot/code_img.png")  # 将验证码图片保存为code_img.png
     
     
    # 调用验证码识别库
    def reco():
        ocr = ddddocr.DdddOcr()
        with open("F:/screenshot/code_img.png", 'rb') as f:
            image = f.read()
        res = ocr.classification(image)
        return (res)
     
     
    # 输入用户信息及验证码
    def input1(driver, username, passwd):
        driver.find_element(By.XPATH, '//input[@placeholder="请输入用户名/手机"]').send_keys(username)  # 输入账号
        driver.find_element(By.XPATH, '//input[@placeholder="请输入密码"]').send_keys(passwd)  # 输入密码
        driver.find_element(By.XPATH, '//input[@placeholder="请输入验证码"]').send_keys(reco())  # 输入验证码
        time.sleep(1)
        driver.find_element(By.XPATH, '//button[@type="button"]').click()  # 点击登录
        time.sleep(2)  # 等待跳转至首页
     
     
    # 判断验证码是否正确
    def while_login(driver):
        while True:
            try:
                driver.find_element(By.CLASS_NAME, "eb-sidebar-logo-collapsed")  # 如果找到了首页这个元素则停止循环
                break
            # 若没有找到首页元素标识,则一直循环识别验证码,输入并登录
            except:
                sav()
                reco()
                driver.find_element(By.XPATH, '//input[@placeholder="请输入验证码"]').clear()
                driver.find_element(By.XPATH, '//input[@placeholder="请输入验证码"]').send_keys(reco())
                time.sleep(1)
                driver.find_element(By.XPATH, '//button[@type="button"]').click()
                time.sleep(2)
     
     
    # 退出登录
    def exit_login(driver):
        #   将鼠标悬停在设置图标上
        mouse = driver.find_element(By.XPATH, '//i[@aria-label="图标: setting"]')
        ActionChains(driver).move_to_element(mouse).perform()
     
        #   点击退出登录
        driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div/div[2]/div/div/div/div[3]/div[4]').click()
     
        #   等待弹窗加载,确定退出
        time.sleep(2)
        driver.find_element(By.XPATH, '//button[@type="button" and @class="eb-btn eb-btn-primary"]').click()
        driver.quit()  # 关闭浏览器
     
    if __name__ == '__main__':
        URL = "XXXXXXXXXXXXXXXXXX"   #我的工作地址
    
        for i in range(len(username)):
            single_username = username[i]
            single_passwd = password[i]
    
            driver = sta()
            sav(driver)
            input1(driver, single_username, single_passwd)
            while_login(driver)
            exit_login(driver)
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月3日
  • 已采纳回答 8月3日
  • 修改了问题 8月3日
  • 赞助了问题酬金10元 8月3日
  • 展开全部

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效