• python+selenium win32gui实现文件上传 enumerate()


    upload = dr.find_element_by_id('exampleInputFile0')
    upload.click()
    time.sleep(1)
    
    # win32gui
    dialog = win32gui.FindWindow('#32770', u'打开')  # 对话框
    
    ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None) 
    
    ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
    
    Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)  # 上面三句依次寻找对象,直到找到输入框Edit对象的句柄
    
    button = win32gui.FindWindowEx(dialog, 0, 'Button', None)  # 确定按钮Button
    
    
    win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, 'D:category.sql')  # 往输入框输入绝对地址
    
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 按button
    ----------------------------------

    函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。

        函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);

        参数;

        hwndParent:要查找子窗口的父窗口句柄。

        如果hwnjParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。

        Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。

        hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。

        lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。

        lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。

        若想获得更多错误信息,请调用GetLastError函数。

    Unity3d中SendMessage 用法简单笔记

    Message相关有3条指令:
    SendMessage ("函数名",参数,SendMessageOptions) //GameObject自身的Script
    BroadcastMessage ("函数名",参数,SendMessageOptions)  //自身和子Object的Script
    SendMessageUpwards ("函数名",参数,SendMessageOptions)  //自身和父Object的Script
    用于向某个GameObject发送一条信息,让它完成特定功能。
    其实本质是调用那个GameObject里面的Script里面的函数,可以跨语言的,例如Javascript可以调用C#的函数,我已实验成功。
    ☆另外,如果GameObject本身有两个脚本,例如“move1”和“move2”,两个脚本内有同名函数例如“moveMe()”,会两个函数都执行一次。

    第三个参数使用:
    SendMessageOptions.RequireReceiver //如果没有找到相应函数,会报错(默认是这个状态)
    SendMessageOptions.DontRequireReceiver //即使没有找到相应函数,也不会报错,自动忽略




    enumerate()说明

        enumerate()是python的内置函数
        enumerate在字典上是枚举、列举的意思
        对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
        enumerate多用于在for循环中得到计数

        例如对于一个seq,得到:

        (0, seq[0]), (1, seq[1]), (2, seq[2])
            1

        enumerate()返回的是一个enumerate对象,例如:
        这里写图片描述

    enumerate()使用

        如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:

    list1 = ["这", "是", "一个", "测试"]
    for i in range (len(list1)):
        print i ,list1[i]

        上述方法有些累赘,利用enumerate()会更加直接和优美:

    list1 = ["这", "是", "一个", "测试"]
    for index, item in enumerate(list1):
        print index, item
    >>>
    0 这
    1 是
    2 一个
    3 测试

        enumerate还可以接收第二个参数,用于指定索引起始值,如:

    list1 = ["这", "是", "一个", "测试"]
    for index, item in enumerate(list1, 1):
        print index, item
    >>>
    1 这
    2 是
    3 一个
    4 测试

    补充

    如果要统计文件的行数,可以这样写:

    count = len(open(filepath, 'r').readlines())

    这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作。

    可以利用enumerate():

    count = 0
    for index, line in enumerate(open(filepath,'r')):
        count += 1

  • 相关阅读:
    为php5.6安装memched扩展
    关于OAM Webgate的最大链接数
    linux下tomcat-6的安装使用
    FastDFS_V5.0分布式存储(介绍、安装与使用)
    回忆过去,展望未来——写在2017年春节到来之际
    Linux下如何不停止服务,清空nohup.out文件
    Linux下LVM
    TCP/IP 三次握手-四次挥手
    weblogic.security.SecurityInitializationException: Authentication for user weblogic denied(详见下面具体报错信息)
    后台启动weblogic成功后,在web浏览器上无法访问
  • 原文地址:https://www.cnblogs.com/klb561/p/10214783.html
Copyright © 2020-2023  润新知