【问题标题】:Manipulate a web-page control with VBA使用 VBA 操作网页控件
【发布时间】:2019-02-15 11:15:36
【问题描述】:

提前感谢您的回答。

我制作了一个小 Excel 文档,以便天真的用户可以在 Excel 工作表中输入网页,点击按钮,然后在浏览器中全屏播放该页面中的视频,并自动循环播放视频无需任何进一步的用户交互。它基本上是创建视频幻灯片。

我最初是为 YouTube 制作的,它在那里运行良好。我现在正在尝试扩展它以使用另一个站点。它按计划工作,但需要额外的步骤。

YouTube 是使用全屏模式制作的,我可以通过编程方式访问,而这个网站嵌入了视频。 (例如:https://www.sharecare.com/video/health-topics-a-z/copd/what-can-i-do-to-prevent-my-copd-from-getting-worse)。

您可以在代码中看到我以全屏模式打开 IE(确实如此),但这是完整的网页(标题、侧边栏等)。我希望该页面中的视频是唯一的元素,全屏。

如果我实际进入该页面,我可以选择让视频全屏播放。我尝试过寻找各种方法来做到这一点,但大多数帖子都是针对其他内容或如何让视频在 Excel 中播放,而不是我正在做的事情。

Sub StartLooping()

Dim IEapp As Object
Dim VidAddr1, VidAddr2 As String
Dim AddrStrStart, AddrStrEnd As Long
Dim AddrFudge1, AddrFudge2 As Integer
Dim TimeStart, DurMin, DurSec, DurTot As Single
Dim LRAll, LRVid, LRMin, LRSec, LRVidB, LRMinB, LRSecB As Integer
Dim I As Integer

Application.EnableCancelKey = xlErrorHandler
On Error GoTo ErrorHandle


'Review Sheet
LRVid = Cells(Rows.Count, "D").End(xlUp).Row
LRMin = Cells(Rows.Count, "E").End(xlUp).Row
LRSec = Cells(Rows.Count, "F").End(xlUp).Row
LRVidB = Cells(Rows.Count, "I").End(xlUp).Row
LRMinB = Cells(Rows.Count, "J").End(xlUp).Row
LRSecB = Cells(Rows.Count, "K").End(xlUp).Row
LRAll = Cells(Rows.Count, "S").End(xlUp).Row

If LRVid <> LRMin Then
    MsgBox "You have to include video address and how long (the minutes and the seconds - use 0 if needed)"
    Exit Sub
End If

If LRVid <> LRSec Then
    MsgBox "You have to include video address and how long (the minutes and the seconds - use 0 if needed)"
    Exit Sub
End If

If LRVidB <> LRMinB Then
    MsgBox "You have to include video address and how long (the minutes and the seconds - use 0 if needed)"
    Exit Sub
End If

If LRVidB <> LRSecB Then
    MsgBox "You have to include video address and how long (the minutes and the seconds - use 0 if needed)"
    Exit Sub
End If


'Start of For-Next Loop

For I = 20 To LRAll

'Set Addr

'VidAddr1
If Len(Range("S" & I).Text) = 0 Then
    Exit Sub
    Else
        VidAddr1 = Range("S" & I).Text
End If

VidAddr2 = VidAddr1

'Set Timer
TimeStart = Timer 'Start time
DurMin = Range("T" & I).Value
DurSec = Range("U" & I).Value
DurTot = (DurMin * 60) + DurSec


'Open the web page
Set IEapp = CreateObject("Internetexplorer.Application") 'Set IEapp = InternetExplorer

    With IEapp
        .Silent = True 'No Pop-ups
        .Visible = True
        .FullScreen = True
        .Navigate VidAddr2 'Load web page

        'Keep it open for the duration
            Do While Timer < (TimeStart + DurTot)

                'Check for Esc - refers to a public function
                If KeyDown(vbKeyEscape) Then
                    IEapp.Quit
                    Set IEapp = Nothing
                    Exit Sub
                End If

            Loop

        'Close the page
            IEapp.Quit
            Set IEapp = Nothing

    End With

    If I = LRAll Then I = 19

Next I

ErrorHandle:

    MsgBox Err.Number & " " & Err.Description

Exit Sub

End Sub

我复制了代码。它工作正常。我需要的只是额外的“哦,我做到了,这就是如何去做”。

使用的浏览器是 IE,所以我可以保持简单,但如果这在另一个常见的浏览器中是可能的,那就太好了。

这是我今天(9/12)尝试的第二组

Dim IEapp As Object
Dim IEAppColl As HTMLButtonElement

'Open doc
Set IEapp = CreateObject("Internetexplorer.Application") 'Set IEapp =    InternetExplorer

    With IEapp
        .Silent = True 'No Pop-ups
        .Visible = True
        '.FullScreen = True
        .navigate "https://www.sharecare.com/video/health-topics-a-z/copd/got-copd-ask-your-doctor-about-vitamin-d"

        Do While .readyState < 4 Or .Busy
        Loop

        Set IEAppColl = IEapp.Document.getElementsByTagName("BUTTON")
        If IEAppColl.Name = "Fullscreen" Then
              IEAppColl.Click
        End If

    End With

【问题讨论】:

    标签: vba video web


    【解决方案1】:

    对于示例 COPD 页面,它适用于 Selenium basic。您从here 安装,然后转到VBE &gt; Tools &gt; References &gt; 并添加对Selenium Type Library 的引用。您还可以使用 IEDriver 来使用 InternetExplorer 而不是 Chrome(它使用 ChromeDriver)。

    Option Explicit
    Public Sub PlayFullScreen()
        Dim d As WebDriver, t As Date, ele As Object
        Const MAX_WAIT_SEC As Long = 10
    
        Set d = New ChromeDriver
        Const URL = "https://www.sharecare.com/video/health-topics-a-z/copd/what-can-i-do-to-prevent-my-copd-from-getting-worse"
    
        With d
            .Start "Chrome"
            .get URL
            Do
                DoEvents
                On Error Resume Next
                Set ele = .FindElementByCss("[title='Accept Cookies']")
                If Timer - t > MAX_WAIT_SEC Then Exit Do
                On Error GoTo 0
            Loop While ele Is Nothing
            Application.Wait Now + TimeSerial(0, 0, 1)
            If Not ele Is Nothing Then ele.Click
            .FindElementByCss("#myExperience").Click
            Application.Wait Now + TimeSerial(0, 0, 1)
            .FindElementByCss("[Title=Fullscreen]", timeout:=7000).Click
    
            Stop                                     '<==Delete me later      
            .Quit
        End With
    End Sub
    

    【讨论】:

    • 谢谢。硒可能是一个长期的解决方案。我在公司环境中,所以我必须获得超过截止日期的权限。该代码很有帮助,我明天将不得不更多地探索它。
    • 当谈到浏览器自动化时,我认为它是一种更强大的方法,因此从长远来看是值得的。
    • 我采用了这些元素并尝试模拟它们,但一直遇到运行时错误(类型不匹配)。尝试了许多不同的方法来调暗该变量。
    • @ARB 采取并试图模仿是什么意思?就像为 Internet Explorer 重写一样?这是可能的,但我不确定您是否会让屏幕最大化部分正常工作。您可以尝试研究页面上的事件,看看是否有特定的组合成功,但在我的一般测试中,硒在完成任务时没有问题,而没有硒的 IE 在该部分失败。
    • 是的,这就是我的意思:试图在 IE 中重现。看起来如此接近,但不断收到该错误。
    【解决方案2】:

    我的建议是,不要使用浏览器播放视频,而是使用视频播放器

    在“更多控件”下,您应该有一个“Windows Media Player”,可能还有其他,这取决于您安装的内容。

    例如,我在 Access 表单上使用了 VLC 控件。当您安装 VLC 时,它会自动将控件添加到 Office(所以我假设必须先安装 Office。)


    这是我在网上找到的教程


    随机提示时间:

    • Google 关于一个网站可能很棘手,因为例如,在 Google 搜索中使用搜索词 *YouTube* 会导致 YouTube 内容列表(视频)。

      使用 Google 的 site:- 运算符排除来自特定网站的结果,例如:

      "microsoft access" form play youtube video -site:youtube.com

      ...这就是我找到上面的教程以及其他几个教程的方式。

    • 使用搜索词access 也很难搜索,因为它是一个很常见的词,这就是为什么我经常将它用引号括起来,如“MS Access”或“Microsoft Access”(如上),这使得谷歌搜索这些词按顺序

      (More Google tips)

    【讨论】:

    • 谢谢,这很有帮助。那个“-site”的东西会派上用场的。如果我有视频(例如 YouTube),一切正常。它在我没有视频的其他页面上(或者我可以嵌入 Access 表单、Excel 工作表等。我可以找到视频 ID,但对该领域的了解不足,无法知道如何 1)访问什么播放该视频并 2) 添加全屏属性,就像我在嵌入式播放器中单击全屏一样。
    • ARB - 我很高兴它有帮助。我不清楚您是否说您所以知道在哪里可以找到 URL?在大多数网站上,查看页面源代码会提供线索,即使对于想要隐藏它们的网站也是如此。 (不要违反任何规则,但出于“测试目的”进行实验是可以的。:-) 例如,我为朋友拍了一张 Excel 表,这样他就可以输入任何 Tumblr 用户名,Excel 将下载所有与帐户关联的视频,一一对应。 (再次,出于测试目的。)
    • 我想自动化。我自己可以检查元素,找到视频的 URL 并使用它们(这是我最终得到的临时解决方案)。但我想向用户提供一种产品,让他/她不必获取 URL。此外,虽然我认为展示人们公开发布的视频通常是公平的,但我不想将它们放到本地机器上。
    • @ARB - (psst - 我实际上不在乎你做什么......!)但是你知道,大公司通常有网站条款说你只能在他们的网站,他们想要呈现它的方式(即,不在无广告桌面访问应用程序等等等等等等等)。仅仅因为某些东西可以在线获得,并不意味着你可以允许用它做你想做的事。在您的情况下,“出于促销目的”可能是允许的,具体取决于视频来源。我不在乎 - 而且免责声明:我不是律师!
    • @ARB - ...要记住的另一件事是Stack Overflow 不喜欢主持违反其他公司条款的指示。因此,当有疑问时,要含糊其辞。 “试一试!”有些人坚持按部就班地做事(就像你的老板可能会这样做),在这种情况下你只需要做一些研究。例如,YouTube T&C 允许 distribution through functionality offered by the Service (such as the Embeddable Player)... 您可以将其放置在 Access/Excel Web 浏览器控件中并且都是合法的。无论如何,只是一个友好的抬头。 (我有没有提到我不在乎?)?‎
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多