Windows自动化2️⃣元素定位分析+图片视频上传等

windows自动化,难点元素定位
XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:

  1. preceding-sibling 选取当前节点之前的所有同级节点
  2. following-sibling 选取当前节点之后的所有同级节点
  3. preceding 选取文档中当前节点的开始标签之前的所有节点
  4. following 选取文档中当前节点的结束标签之后的所有节点
  5. preceding-sibling,选取当前节点之前的所有同级节点,同一个parent下该节点之前的节点,即"哥哥"节点(是同父的哥哥节点)。
  6. /AAA/XXX/preceding-sibling:😗 /AAA/XXX节点的所有之前同级节, * 可以是div, span等

以上常用, 其实** 关键还是基于Name属性进行相对定位! **

取不出来具体某一个, 可以全部取出, 然后通过python进行锁定, 继而进行后续操作 !

代码分享:

python 复制代码
Texts = self.driver.find_elements(by=By.XPATH, value='//Group/preceding-sibling::Text')
Texts[-1].click()
time.sleep(1)
self.driver.find_element(by=By.XPATH, value='//Group/Text[@Name="xxx"]').click()
self.driver.find_element(by=By.XPATH, value='//Group/Button[@Name="确定"]').click()
# 等1秒, 判断个人名片可见
time.sleep(1)
assert self.driver.find_element(by=By.XPATH, value='//Document[@Name="hwork-desktop-im"]/Text[@Name="个人名片"]').is_displayed()

对于, 属性为, IsKeyboardFocusable False 无法直接进行操作的, 可以结合其他自动化工具, 进行!

下面我用的pyautogui,去点击的, 因为 这个元素当前无法直接通过这种定位方式进行点击

python 复制代码
stat = self.driver.find_elements(by=By.XPATH, value="//Group/preceding-sibling::Text")
# 选择表情
stat[-7].click()
# 找到 第一个图标
image = self.driver.find_element(by=By.XPATH,
                                 value='//Document[@Name="hwork-desktop-im"]/List/ListItem/Image')
# 鼠标悬停在图标上方
ActionChains(self.driver).move_to_element(image).perform()
# 按下鼠标左键
pyautogui.mouseDown(button='left')
pyautogui.sleep(1)
# 释放鼠标
pyautogui.mouseUp(button='left')
time.sleep(1)
# 点击发送
self.driver.find_element(By.XPATH, '//Document[@Name="hwork-desktop-im"]/Button[@Name="发送"]').click()

一些共用方法,分享

python 复制代码
# 切换为英文输入法
def shift_en(element):

    flag = True
    while flag:
        user32 = ctypes.WinDLL('user32', use_last_error=True)
        curr_window = user32.GetForegroundWindow()
        thread_id = user32.GetWindowThreadProcessId(curr_window, 0)
        klid = user32.GetKeyboardLayout(thread_id)
        lid = klid & (2 ** 16 - 1)
        lid_hex = hex(lid)
        # print(lid_hex)
        if lid_hex == '0x409':
            # print('当前的输入法状态是英文输入模式\n')
            flag = False
        elif lid_hex == '0x804':
            # print('当前的输入法是中文输入模式\n')
            element.send_keys(Keys.META, Keys.SPACE)
            # print('建议删除多余输入法,只保留两种输入法\n')
        else:
            element.send_keys(Keys.META, Keys.SPACE)
            print('当前的输入法既不是英文输入也不是中文输入\n建议删除多余输入法,只保留两种输入法')
        time.sleep(1)
python 复制代码
# 图片,视频路径
def get_filepath():
    # 当前目录
    # baseDir = os.path.dirname(os.path.abspath(os.path.relpath(sys.argv[0])))
    # 上级目录
    baseDir2 = Path(os.path.relpath(sys.argv[0])).resolve().parent.parent
    # print(baseDir2)
    return str(baseDir2) + "\\file\\"
python 复制代码
import win32con
import win32clipboard as wincld
# 给鼠标右键复制使用
def ctrl_c(info):
    wincld.OpenClipboard()
    wincld.EmptyClipboard()
    wincld.SetClipboardData(win32con.CF_UNICODETEXT, info)
    wincld.CloseClipboard()
python 复制代码
# 图片/视频上传
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def upload_file(driver, file):
    # 定位文件路径输入框并输入文件路径
    file_input = WebDriverWait(driver, 60, 0.5).until(EC.visibility_of_element_located((By.XPATH, "//Edit[@Name='文件名(N):']")))
    file_input.send_keys(file)
    # 定位打开按钮并点击
    file_open_btn = WebDriverWait(driver, 60, 0.5).until(EC.visibility_of_element_located((By.XPATH, "//Button[@Name='打开(O)']")))
    file_open_btn.click()
相关推荐
Fluxart.ai3 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
sudebao点com4 小时前
一次“Google 能打开,FlexTV 打不开”的 DNS 故障排查:从 curl 超时到完整证据链
windows·macos·https·cdn·dns·nslookup·网络排错
YOLO数据集集合6 小时前
一站式AI数据自动化标注与训练平台:零门槛玩转YOLO全系列模型
人工智能·深度学习·yolo·ai·自动化·数据集·标注软件
非凡ghost7 小时前
分区助手:Windows 磁盘管理的“瑞士军刀“,分区调整不再怕丢数据
服务器·windows·电脑·软件需求
xiaoxiangsiyan9 小时前
RHCE2026完整版全知识点清单
运维·网络·学习·自动化·rhce
风控PM说9 小时前
自动化风控策略生成:基于决策树的方法
运维·决策树·自动化
AlanBruce10 小时前
摩尔信使MThings新功能:水电不分家、一键设备扫描
网络·自动化·plc·mthings·摩尔信使·电气·西门子s7
淡海水11 小时前
01-07-运行时-GC深度剖析-内存分配回收与结构选择
jvm·windows·unity·gc
DAVIED913 小时前
llama.cpp 本地部署完全指南
windows·llama·wsl·llamacpp
云上飞4763696215 小时前
Windows WSL2 + Docker 环境下NVIDIA PhysicsNeMo 安装指南
windows·docker·physicsai·physicsnemo