寻找自动滚动信息板的解决方案

时间:2016-02-10 18:43:55

标签: python firefox powerpoint television

目前,我的公司在大楼内分布着大约40个信息板,其中包含与每个区域相关的信息。每个单元都是一个基于Linux的小型设备,可以通过编程启动RDP会话,使用用户名和密码登录,并启动相应的powerpoint并开始播放。董事会将每4小时关闭一次约5分钟,复制新版本的演示文稿(如果适用)并重新启动。

我们现在有"要求"对于实时数据。不幸的是,我相信powerpoint将不再是一个选项,因为我们使用了Powerpoint查看器,它不支持插件。我想使用谷歌幻灯片,但也有限制,我们不能有像谷歌大道这样的面向公众的服务,所以有这样的想法。

我正在考虑某种方式来启动Web浏览器,并通过指定的网页列表(可能存储在txt或csv文件中)进行旋转。我找到了一种方法来启动Firefox并通过python将其自动登录到OBIEE:

#source: http://obitool.blogspot.com/2012/12/automatic-login-script-for-obiee-11g_12.html

import unittest
from selenium import webdriver
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile


# Hardcoding this information is usually not a good Idea!
user       = ''   # Put your user name here
password   = ''   # Put your password here
serverName = ''   # Put Host name here


class OBIEE11G(unittest.TestCase):

    def setUp(self):

        # Create a new profile
        self.fp = webdriver.FirefoxProfile()
        self.fp.set_preference("browser.download.folderList",2)
        self.fp.set_preference("browser.download.manager.showWhenStarting",False)

        # Associate the profile with the Firefox selenium session
        self.driver   = webdriver.Firefox(firefox_profile=self.fp)
        self.driver.implicitly_wait(2)

        # Build the Analytics url and save it for the future
        self.base_url = "http://" + serverName + ":9704/analytics"

def login(self):

        # Retreive the driver variables created in setup
        driver = self.driver

        # Goto the loging page
        driver.get(self.base_url + "/")

        # The 11G login Page has following elements on it
        driver.find_element_by_id("sawlogonuser").clear()
        driver.find_element_by_id("sawlogonuser").send_keys(user)
        driver.find_element_by_id("sawlogonpwd").clear()
        driver.find_element_by_id("sawlogonpwd").send_keys(password)
        driver.find_element_by_id("idlogon").click()


    def test_OBIEE11G(self):
        self.login()

#
if __name__ == "__main__":
    unittest.main()

如果我可以使用它,我只需要一种方法每30秒旋转一个新的网页。有什么想法/建议吗?

1 个答案:

答案 0 :(得分:0)

您可以在每个等待指定时间的页面上放置一个简单的javascript代码段,然后重定向到新页面。这具有简单实现的优点,但是在许多html文件上维护它可能很烦人。

另一种选择是将您的副本写在markdown文件中,然后有一个单独的html页面,它通过文件列表旋转并呈现并显示降价。然后,您将通过重写markdown文件来更新数据。它不会完全是现场,但如果30秒的分辨率是可以的,你就可以逃脱它。这样的客户端代码:

HTML

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Message Board</title>
    <link rel="stylesheet" type="text/css" href="/css/style.css">
  </head>
  <body>
    <div id="content" class="container"></div>
    <!-- jQuery -->
    <script src="//code.jquery.com/jquery-2.1.4.min.js" defer></script>

    <!-- markdown compiler https://github.com/chjj/marked/ -->
    <script src="/js/marked.min.js" defer></script>

    <script src="/js/main.js" defer></script>
  </body>
</html>

和javascript

// main.js
// the markdown files
var sites = ["http://mysites.com/site1.md", "http://mysites.com/site2.md", "http://mysites.com/site3.md", "http://mysites.com/site4.md"]

function render(sites) {
    window.scrollTo(0,0);

    //get first element and rotate list of sites
    var file = sites.shift();
    sites.push(file);

    $.ajax({
        url:file,
        success: function(data) { $("#content").html(marked(data)); },
        cache: false
    });

    setTimeout(render(sites), 30000);
}

// start the loop
render(sites);

然后,您可以使用任何想要写出降价文件的方法。