美文网首页
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