使用Selenium VBA自动化wideo文本转语音网站遇元素定位难题
完整自动化解决方案
问题分析
原代码定位失败的核心原因:
- 目标输入框并非传统
input/textarea标签,而是带contenteditable="true"属性的div元素,不存在name="label"属性,因此FindElementByName无法定位。 - 网站为动态单页应用,元素需等待渲染完成才能操作,直接执行代码会因元素未加载导致定位失败。
完整VBA代码
Sub wideoAutomate() Dim obj As New WebDriver Dim inputElement As Selenium.WebElement Dim generateBtn As Selenium.WebElement Dim downloadBtn As Selenium.WebElement Dim voiceDropdown As Selenium.WebElement ' 初始化Edge浏览器,设置自定义下载路径(替换为你的本地路径) obj.AddArgument "--download.default_directory=C:\Your\Local\Download\Path" obj.Start "edge" ' 访问目标网站 obj.Get "https://wideo.co/text-to-speech/" ' 显式等待输入框加载(最长等待10秒) obj.WaitUntil (Timeout:=10, Condition:=Condition.ElementIsVisible(By.CssSelector, "div[contenteditable='true'][placeholder='Type or paste your text here...']")) ' 定位输入框并输入文本 Set inputElement = obj.FindElementByCss("div[contenteditable='true'][placeholder='Type or paste your text here...']") inputElement.Clear inputElement.SendKeys "I Went to College" ' (可选)选择语音类型:点击下拉框并选第一个选项 Set voiceDropdown = obj.FindElementByCss("div.Select__Control-sc-17z783z-0") voiceDropdown.Click obj.WaitUntil (Timeout:=5, Condition:=Condition.ElementIsVisible(By.CssSelector, "div.Select__Option-sc-17z783z-3")) obj.FindElementByCss("div.Select__Option-sc-17z783z-3").Click ' 点击生成语音按钮 Set generateBtn = obj.FindElementByCss("button.Button__ButtonStyled-sc-1e1g60c-0:nth-child(1)") generateBtn.Click ' 等待生成完成,下载按钮出现(最长等待20秒,可根据文本长度调整) obj.WaitUntil (Timeout:=20, Condition:=Condition.ElementIsVisible(By.CssSelector, "a.Button__ButtonStyled-sc-1e1g60c-0:nth-child(2)")) ' 点击下载按钮 Set downloadBtn = obj.FindElementByCss("a.Button__ButtonStyled-sc-1e1g60c-0:nth-child(2)") downloadBtn.Click ' 等待下载完成(按需调整等待时长) obj.Wait 5 ' 关闭浏览器 obj.Quit End Sub
关键注意事项
- 元素定位逻辑:使用CSS选择器定位动态元素,避免依赖易变更的ID/name属性,提升代码稳定性。
- 显式等待:通过
WaitUntil方法等待元素加载完成,替代固定延时,适配不同网络环境下的页面渲染速度。 - 环境要求:运行前需确保已正确引用Selenium VBA库,且Edge浏览器驱动版本与本地浏览器版本完全匹配。
内容的提问来源于stack exchange,提问作者satyanarayan mohanty
相关产品推荐
相关产品推荐

