我在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响应代码?我想知道这里有什么问题?我不相信它与平台依赖有关吗?有什么建议吗?
答案 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();
});