为什么我不能在Phantomjs中直接使用webPage.create()的结果?

时间:2016-11-27 13:18:46

标签: javascript phantomjs

我正在使用phantomjs创建页面的Base64截图。我有东西,我真的不太明白。这是我的代码:

void insert_at_begning(int value)
{
    var=(struct node *)malloc(sizeof (struct node));
    var->data=value;
    if(head==NULL)
    {
        head=var;
        head->next=NULL;
    }
    else
    {
        var->next=head;
        head=var;
    }
}

void insert_at_end(int value)
{
    struct node *temp;
    temp=head;
    var=(struct node *)malloc(sizeof (struct node));
    var->data=value;
    if(head==NULL)
    {
        head=var;
        head->next=NULL;
    }
    else
    {
        while(temp->next!=NULL)
        {
            temp=temp->next;
        }
        var->next=NULL;
        temp->next=var;
    }
}

void insert_at_middle(int value, int loc)
{
    struct node *var2,*temp;
    var=(struct node *)malloc(sizeof (struct node));
    var->data=value;
    temp=head;

    if(head==NULL)
    {
        head=var;
        head->next=NULL;
    }
    else
    {
        while(temp->data!=loc)
        {
            temp=temp->next;
        }
        var2=temp->next;
        temp->next=var;
        var->next=var2;
    }
}

int delete_from_middle(int value)
{
    struct node *temp,*var;
    temp=head;
    while(temp!=NULL)
    {
        if(temp->data == value)
        {
            if(temp==head)
            {
                head=temp->next;
                free(temp);
                return 0;
            }
            else
            {
                var->next=temp->next;
                free(temp);
                return 0;
            }
        }
        else
        {
            var=temp;
            temp=temp->next;
        }
    }
    printf("data deleted from list is %d",value);
}

int delete_from_end()
{
    struct node *temp;
    temp=head;
    while(temp->next != NULL)
    {
        var=temp;
        temp=temp->next;
    }
    if(temp ==head)
    {
        head=temp->next;
        free(temp);
        return 0;
    }
    printf("data deleted from list is %d",temp->data);
    var->next=NULL;
    free(temp);
    return 0;
}

我想知道为什么我不能立即使用webPage.create()的结果?

对于instanse,此代码将无法完成:

var webPage = require('webpage');

var page = webPage.create();

page.open('http://example.com', function (status) {
  var base64 = page.renderBase64('PNG');
  console.log(base64);
  phantom.exit();
});

2 个答案:

答案 0 :(得分:1)

默认情况下,没有名为struct s(String); fn f(input: &s) -> &s { input } fn main() { let my_struct1 = s("a".to_owned()); let s(foo) = my_struct1; let my_struct2 = s("b".to_owned()); let &s(bar) = f(&my_struct2); // this does not work let baz = &my_struct2.0; // this works } 的对象,因此您需要创建它:

page

之后,您可以照常使用它,例如:var page = require('webpage').create({viewportSize:{width: 1600,height: 900}, settings:{userAgent:'Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0', javascriptEnabled:'true', loadImages:'true' }});

或者您可以使用名为page.renderBase64('PNG');的指针(对当前对象的引用):

this

或相同,但require('webpage').create().open('http://example.com',function(status){ var base64 = this.renderBase64('PNG');// You can use "this", instead of the object name. console.log(base64); phantom.exit(); }); 功能的其他设置:

create()

答案 1 :(得分:1)

您需要open()页面,因为只需调用create()即可实例化页面对象,这样您就可以在页面实际加载之前在其上添加一些事件处理程序。因为在加载后添加这些回调并且你有你的内容会破坏其中一些的目的。例如,像onLoadStarted事件。