1

我正在尝试以移动用户的身份抓取此站点上的某些页面。我将用户代理设置为匹配 iPhone,并尝试将尺寸设置为匹配 320x568。在那之后,我想截屏,这样我就可以看到所有页面的样子,并确保一切都是正确的。但是,它始终是桌面视图。加载特定页面时如何设置QWebView或移动尺寸?QWebPage

下面self.qweb是一个QWebView. 我使用看到了这个问题QMainWindow,但这是一个无头爬行,除了设置“浏览器”视图的宽度和高度外,它的效果很好。我尝试了它的变体,等待页面加载,然后重新设置大小,但它不起作用。

if hasattr(self, 'height') and hasattr(self, 'width'):
    size = self.qweb.page().mainFrame().contentsSize()
    self.qweb.resize(320, 568)

self.qweb.setPage(self.Page())
self.qweb.loadFinished.connect(self.loaded_page)

更新我也试过了,但是页面加载后,返回的 QSize 是 980x568。我什至loaded_page在页面加载后在方法中尝试了相同的函数调用,但这也不起作用。当页面上执行另一个操作时,它只是将视图重置为更大的尺寸。

    self.qweb.setPage(self.Page())
    self.qweb.page().setViewportSize(QtCore.QSize(320, 568))
    self.qweb.page().setPreferredContentsSize(QtCore.QSize(320, 568))
    self.qweb.loadFinished.connect(self.loaded_page)

def loaded_page(self):
    # this returns QSize(980,568)
    size = self.qweb.page().mainFrame().contentsSize()

这是我的Page设置

class Page(QWebPage):
    """QWebPage implementation with a custom user agent string"""

    def __init__(self):
        QWebPage.__init__(self)

        # Settings
        s = self.settings()
        s.setAttribute(QWebSettings.AutoLoadImages, True)
        s.setAttribute(QWebSettings.JavascriptCanOpenWindows, True)
        s.setAttribute(QWebSettings.PluginsEnabled, True)
4

1 回答 1

1

听起来您需要设置首选内容大小

    page.setPreferredContentsSize(QtCore.QSize(320, 568))

但如果这不能给出正确的结果,请尝试设置视口大小

    page.setViewportSize(QtCore.QSize(320, 568))
于 2014-12-06T05:59:35.400 回答