0

文字列データとしていくつかのhtmlコードがあります。ここで、コードをプログラムでレンダリングし、特定の要素のサイズでスクリーンショットを撮る必要があります!!

技術的には、プログラムで Web ブラウザの処理を実行したいのですが、可能ですか?

私はPython環境で探しています

4

2 に答える 2

3

PySide または PyQT を使用すると、かなりの数行のコードになります。

更新:修正コード:

from PySide.QtCore import QUrl, QTimer
from PySide.QtGui import QApplication, QImage, QPainter
from PySide.QtWebKit import QWebView


class Browser(QWebView):

    def __init__(self, app):
        QWebView.__init__(self)
        self.parent_app = app
        self.loadFinished.connect(self._load_finished)
        self.wait = 5 * 1000  # 5 secs

    def _load_finished(self, ok):
        if self.wait:
            QTimer.singleShot(self.wait, lambda: self._load_finished(ok))
            self.wait = None
            return

        frame = self.page().mainFrame()
        self.page().setViewportSize(frame.contentsSize())
        image = QImage(self.page().viewportSize(), QImage.Format_ARGB32)
        painter = QPainter(image)
        frame.render(painter)
        painter.end()
        image.save('test.png')

        self.close()
        self.parent_app.quit()

    def open(self, url):
        self.load(QUrl(url))


if __name__ == '__main__':
    app = QApplication([])
    html = """
    <html>
        <head>
            <script type="text/javascript">
                setTimeout(function () {
                    var e = document.getElementById("later");
                    e.innerHTML = "arrived";
                }, 2500);
            </script>
        </head>
        <body>
            <div id="later"></div>
            <div style="margin: 0 auto; width: 500px;">
                <img src="http://www.caminodesantiago.me/wp-content/uploads/water-bottle.jpg" />
            </div>
        </body>
    </html>
    """
    browser = Browser(app)
    browser.setHtml(html)
    app.exec_()
于 2013-05-14T06:47:07.077 に答える
2

既に示唆されているように、Selenium Webdriver Python Bindings が役に立ちます。コードは次のようになります。

from selenium import webdriver
from selenium.common.exceptions import WebDriverException

browserHandler = webdriver.Firefox()
browserHandler.get(yourUrl)
try:
    browserHandler.get_screenshot_as_file(yourPathToNewImage)
except WebDriverException:
    print("WebDriverException caught while trying to get a screenshot")
于 2013-05-14T07:20:32.470 に答える