2014-12-06 70 views
1

我试图抓取本网站上的某些页面作为移动用户。我将用户代理设置为与iPhone匹配,并试图将尺寸设置为匹配320x568。之后,我想要截图,以便查看所有网页的外观,并确保一切正确。但是,它始终是桌面视图。当我加载特定页面时,如何将QWebViewQWebPage设置为移动尺寸?将QWebView设置为移动尺寸

self.qweb以下是QWebView。我看到this question使用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) 

UPDATE我只是想这是很好,但在页面加载之后,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) 

回答

1

这听起来像你需要设置preferred contents size

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

但是,如果不给出正确的结果,尝试设置viewport size

page.setViewportSize(QtCore.QSize(320, 568)) 
+0

其实划伤,这可能是工作... – Nathan 2014-12-06 18:19:11

+0

我的问题是与用户代理,这个作品非常感谢! – Nathan 2014-12-06 18:28:08