如何在幻像模块中设置用户代理字符串?

时间:2015-02-17 17:59:49

标签: node.js phantomjs

var phantom = require('phantom');
console.dir(phantom);
phantom.create(function(browser){
    browser.createPage(function(page){
        page.customHeaders={
            "HTTP_USER_AGENT": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36",
            };
        console.dir(page.settings);
        //undefined
        page.settings={};
        page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36';
        page.settings.HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36';
        console.dir(page.settings);
        page.open('http://example.com/req.php', function() {
            setTimeout(function() {
                var output = page.evaluate(function() {
                    return document;
                    });
                console.dir(output);
                //undefined
                }, 1000);
             });});});

当我使用phantomjs时,我尝试使用三种不同的方式设置userAgent的标头但是当我访问页面并将PHP $ _SERVER对象保存到txt pad时我仍然看到PhantomJS

HTTP_USER_AGENT: Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.1-development Safari/538.1

不仅如此,页面的输出也是未定义的。

似乎文档已经改变,或者我找不到正确的文档。我在看

http://phantomjs.org/api/webpage/property/settings.html

https://www.npmjs.com/package/phantom

如何正确使用?

2 个答案:

答案 0 :(得分:7)

根据文档中的Functional Details,您必须通过page.set()设置用户代理:

page.set('settings.userAgent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36');

必须以这种方式完成,因为桥必须与PhantomJS进程通信,而不是以非异步方式执行此操作。这可能是用Object.defineProperty实现的。

如果您想一次设置多个设置,可以执行(ref):

page.set('settings', {
    userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11",
    javascriptEnabled: false,
    loadImages: false
});

您可以在page.settings中找到可以设置的设置列表。

答案 1 :(得分:1)

目前[27.01.2018],有以下要求:     幻影:^ 4.0.12,     网页:^ 0.3.0

我使用此方法设置此属性:

  

page.setting(key,value);

我在$ _SERVER数组中使用php检查了它。它工作正常。

完全代码如下所示:

const phantom = require('phantom');

(async function() {
  const instance = await phantom.create();
  const page = await instance.createPage();
  page.setting('userAgent',"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11");

  await page.on('onResourceRequested', function(requestData) {
    //Dump request settings to view result of our changes:
    console.info('Requesting', requestData);
  });

  const status = await page.open('https://stackoverflow.com');
  const content = await page.property('content');
  //console.log(content);

  await instance.exit();
})();