使用selenium webdriver获取网页的移动版本而不是桌面版本

时间:2014-07-31 23:11:25

标签: selenium-webdriver web-scraping scrapy phantomjs

我在Debian远程服务器上使用无头firefox,以便用selenium webdriver获取一些数据并稍后传递给scrapy。我没有获得桌面版本,而是从我尝试从中删除数据的网页获取移动版本。我需要桌面版!我知道我需要发送正确的用户代理字符串,这就是我的工作方式:

def call_via_proxy(PROXY_HOST,PROXY_PORT):
        fp = webdriver.FirefoxProfile()
        # Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5
        fp.set_preference("network.proxy.type", 1)
        fp.set_preference("network.proxy.http",PROXY_HOST)
        fp.set_preference("network.proxy.http_port",int(PROXY_PORT))
        fp.set_preference("general.useragent.override","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0")
        fp.update_preferences()
        return webdriver.Firefox(firefox_profile=fp)
#create webdriver
driver = call_via_proxy("us.proxymesh.com","31280")
driver.get(response.url)

代码在我的台式机(win7)上工作正常,但在代码需要运行的服务器(debian)上我得到了网页的移动版本。如果我使用phantomJS,也会发生同样的情况。

    #set user agents for PhantomJS
    user_agent = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) ")
    dcap = dict(DesiredCapabilities.PHANTOMJS)
    dcap["phantomjs.page.settings.userAgent"] = user_agent
    driver = webdriver.PhantomJS('/usr/local/share/phantomjs-1.9.7-linux-i686/bina/phantomjs',desired_capabilities=dcap)
    driver.get(response.url)

有没有办法从带有selenium的网页获取HTTP响应代码?我想知道这里有什么问题?我不相信它与平台依赖有关吗?有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我遇到了一些来自屏幕大小的移动响应式模板的问题。在这种情况下,Phantom似乎对我有一套规则。强制桌面浏览器大小(driver.manage().window.size)似乎对我有效。

我没有这方面的Java代码,但在C#中这将是:

_driver.Manage().Window.Size = new Size(1024,768);    

我似乎记得你可能会传递Dimensions值。我这样做,桌面页面再次出现!

答案 1 :(得分:1)

我自己也有同样的问题。我有userAgent集,但没有viewportSize。默认值为400x300。一旦我设置了这个,我就可以获得桌面版。

这是一个JS示例实现,您应该能够适应您的解决方案。

var webPage = require('webpage');
var page = webPage.create();

//This is the Chrome 55 UA.
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36';

//THE ANSWER. This is just my test server resolution.
page.viewportSize = {
  width: 1600,
  height: 900
};

page.open('http://www.example.com', function(status) {

  if(status === "success") {
    //Saves an image of the page.
    page.render('example.png');
  }

  //Tidy up.
  phantom.exit();
});