美文网首页
Python打开Edge浏览器调用大声朗读

Python打开Edge浏览器调用大声朗读

作者: 我的小小笔尖 | 来源:发表于2022-03-11 09:55 被阅读0次

    程序截图

    捕获.JPG

    程序源代码

    # https://pysimplegui.readthedocs.io/en/latest/
    import PySimpleGUI as sg
    
    # https://www.programcreek.com/python/index/322/win32gui
    import win32gui
    
    # http://www.selenium.org.cn/
    from selenium import webdriver
    from selenium.webdriver.edge.service import Service
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    
    import keyboard
    import time
    import sys
    
    # 主题色
    sg.theme('DarkAmber')
    
    # 窗口布局
    layout = [
        [sg.Text('请输入需要转换为语音的文字')],
        [sg.Multiline('曾经沧海难为水,除却巫山不是云。', size=(100,10), key='textContent')],
        [sg.Button('打开Edge浏览器调用大声朗读', key='ttsButton')]
    ]
    
    # 创建窗口
    window = sg.Window('调用Edge大声朗读功能实现文字转语音', layout)
    
    # 获取所有真实窗口
    def get_all_windows():
        def call(hwnd, param):
            if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
                param.append(hwnd)
        winds = []
        win32gui.EnumWindows(call, winds)
        return winds
    
    # 定义文件名和文件路径,保存文本内容到文件
    textFilename = "temp.html"
    filepath = sys.path[0] + '\\' + textFilename
    def saveTextContent(textContent):
        with open(textFilename, 'a') as out:
            out.truncate(0)
            out.write(textContent)
    
    # 定义Edge浏览器驱动变量
    edgeDriver = None
    
    # 循环处理事件
    while True:
        event, values = window.read()
    
        # 用户点击X关闭窗口或点击退出按钮(同时关闭Edge浏览器)
        if event == sg.WIN_CLOSED:
            if(edgeDriver is not None):
                edgeDriver.close()
            break
    
        if event == 'ttsButton':
            # 获取文字
            textContent = values['textContent']
            textContent = textContent.replace("\n","</div><br/><div>")
            # 将文字保存为文件
            saveTextContent('<html><body><div>'+textContent+'</div></body></html>')
    
            # 必须安装了Edge浏览器
            # 打开Edge浏览器,地址栏输入查看版本:edge://settings/help
            # 官网下载相应版本的驱动,将其放在python安装目录:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
            driverFile = r'C:\Users\winds\AppData\Local\Programs\Python\Python37\msedgedriver.exe'
            # 未调用过Edge浏览器时才会调用
            if(edgeDriver is None):
                # 使用Selenium调用Edge浏览器(executable_path参数已被弃用,使用Service对象)
                serviceObj = Service(driverFile)
                edgeDriver = webdriver.Edge(service=serviceObj)
                # 设置浏览器大小
                # edgeDriver.set_window_size(400,300)
                edgeDriver.maximize_window()
                # 打开文件
                edgeDriver.get(filepath)
                # 暂停1秒
                time.sleep(1)
            else:
                # 已经调用了Edge浏览,则刷新(刷新会隐藏大声朗读控制栏)
                edgeDriver.refresh()
                # 暂停1秒
                time.sleep(1)
    
            # 查找所有窗口
            winds = get_all_windows()
            edgeWindow = None
            edgeTitle = None
            edgeClassName = None
            for wind in winds:
                title = win32gui.GetWindowText(wind)
                className = win32gui.GetClassName(wind)
                # 判断是否Edge浏览器窗口
                if title.find(textFilename)>=0:
                    edgeWindow = wind
                    edgeTitle = title
                    edgeClassName = className
    
            # 将Edge浏览器设为前台窗口
            win32gui.SetForegroundWindow(edgeWindow)
            # 暂停1秒
            time.sleep(1)
    
            # 键盘操作(大声朗读组合键,第一次调出大声朗读控制栏)
            keyboard.press_and_release("ctrl+shift+u")
            # 暂停1秒
            time.sleep(1)
    
            # 键盘操作(大声朗读组合键,第二次时执行大声朗读功能)
            keyboard.press_and_release("ctrl+shift+u")
            # 暂停1秒
            time.sleep(1)
    
            # 执行浏览器朗读快捷键:ctrl+shift+u
            # element = edgeDriver.find_element(By.TAG_NAME, 'body')
            # element.send_keys(Keys.CONTROL + Keys.SHIFT + 'u') # 组合键操作工具栏大声朗读功能失败
            # element.send_keys(Keys.CONTROL + 'a') # 组合键全选功能可以使用(猜测组合键只能对网页中的内容起作用)
    
    window.close()
    

    补充说明

    1. webdriver 的组合键功能不能调用大声朗读。
    2. 当文字较多时大声朗读有卡顿现象。
    3. 大声朗读的中文语音有:Huihui、Kangkang、Yaoyao,另外有时候还会有:Xiaoxiao、Yunyang。(后两个是自然语音,接近真人发音)
    4. 程序驱动Edge浏览器时不会出现真人发音选项,而直接打开浏览器会出现真人发音选项,狗日的。
    捕获2.JPG 捕获3.JPG

    相关文章

      网友评论

          本文标题:Python打开Edge浏览器调用大声朗读

          本文链接:https://www.haomeiwen.com/subject/neexdrtx.html