小编Mri*_*lla的帖子

我怎样才能在PhantomJS中等待页面准备好?

我正在使用PhantomJS登录网站做某事.该网站使用OAuth进行登录.点击该按钮上的"登录"按钮,即可转到OAuth服务.在那里输入您的凭据并单击"提交",您将被重定向回原始站点.我的脚本工作正常,但依赖于看似不太强大的超时.

如何重写此代码,以便setTimeout我可以等到页面准备就绪,而不是使用它.我经常看到页面没有准备好的错误,因此jQuery没有初始化.

我对Javascript不是很好,所以一个例子会有所帮助.这是我经过大量谷歌搜索后一起攻击的内容.这是我的代码:

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

page.settings.resourceTimeout = 10000;
page.onResourceTimeout = function(e) {
  console.log("Timed out loading resource " + e.url);
};

page.open('https://mysite.com/login', function(status) {
    if (status !== 'success') {
        console.log('Error opening url');
        phantom.exit(1);
    } else {
        setTimeout(function() {
            console.log('Successfully loaded page');
            page.evaluate(function() {
                $("#submit-field").click(); //Clicking the login button
            });

            console.log('Clicked login with OAuth button');
            setTimeout(function() {
                console.log('Addding the credentials');
                page.evaluate(function() {                
                    document.getElementById("username").value = 'user@example.com';
                    document.getElementById("password").value = 'P@ssw0rd';
                    document.getElementById("Login").click();
                });
                console.log('Clicked login button');

                setTimeout(function() …
Run Code Online (Sandbox Code Playgroud)

javascript phantomjs

10
推荐指数
1
解决办法
2万
查看次数

SimpleHTTPServer作为线程启动:不守护进程

我想SimpleHTTPServer在一个单独的线程中启动一个,同时time.sleep(100)在主要的一个中执行其他操作(此处).以下是我的代码的简化示例:

from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer

server = HTTPServer(('', 8080), SimpleHTTPRequestHandler)
print 'OK UNTIL NOW'
thread = threading.Thread(target = server.serve_forever())
print 'STUCK HERE'
thread.setdaemon = True
try:
    thread.start()
except KeyboardInterrupt:
    server.shutdown()
    sys.exit(0)

print 'OK'

time.sleep(120)
Run Code Online (Sandbox Code Playgroud)

但是,该线程仍然是"阻塞",即不作为守护进程启动,并且解释器无法到达print 'OK'.它既没有达到STUCK HERE.

我已经知道线程只会在调用时被初始化,threading.Thread(...)并且主线程仍然会更进一步,直到找到thread.start启动它的指令.

有没有更好的方法来完成这项任务?

python httpserver

10
推荐指数
1
解决办法
8465
查看次数

Django管理员,没有"模特"的部分?

在Django管理控制台中,所有部分(菜单链接)都来自带有数据库表的模型,但是如果我需要一个没有相应模型对象(没有数据库表)从模型中获取其他部分数据的部分,我还需要做什么?

有任何想法吗?谢谢

django django-models django-forms django-admin

9
推荐指数
1
解决办法
1万
查看次数

编写代码美化器

我想写一个代码美化器,我想用Ruby来做.有人能告诉我一个开始的地方吗?我在网上看过很多代码美化,但我从来没有遇到过如何编写代码的任何教程.对于从未承担任何项目(例如编写编译器,解析器等)的人来说,这是一项非常具有挑战性的任务吗?

(还有其他语言更适合这种任务,不包括C/C++吗?)

ruby code-formatting

9
推荐指数
1
解决办法
1444
查看次数

如何实现简单的AsyncTaskLoader?

在我最近的一个SO问题中,有人建议我使用Loader我的解决方案.所以在这里我试图了解如何实现一个简单的AsyncTaskLoader

这是我想出的:

public class Scraper extends AsyncTaskLoader<List<Event>> {

    List<Event> lstEvents;

    public Scraper(Context context) {
        super(context);
    }

    public List<Event> loadInBackground() {

            //This is where I will do some work and return the data

    }

}
Run Code Online (Sandbox Code Playgroud)

这就是我所知道的.我阅读了文档,AyncTaskLoader但我从来没有遇到任何如此神秘和混乱的东西.有一百万种方法,所有这些方法都是相互矛盾的,看着它们是不可能的,它们被调用的顺序,甚至它们是否应该被覆盖和调用.这项任务的生命周期是一个该死的噩梦.

我正在寻找的只是简单地抓取一些数据并将其返回.我还想将它存储在一个类变量中,以便我在下一次立即返回它而不必再次刮掉所有数据.

我没有打开游标,流或类似的东西,只是一个简单的变量lstEvents(可能很大).我不想泄漏内存和浪费资源,所以如果有人可以解释我需要关闭/无效的地方和时间以使这项任务有效,我会很高兴.

我应该在哪里将数据存储到类变量中?Shoudl我在我的loadInBackground方法结束时这样做或者我应该在deliverResult方法中这样做吗?

在这个简单的场景中,是否有我真正需要检查任务是否被取消或是否被重置的地方,或者我是否应该简单地不覆盖这些方法并让它AsyncTaskLoader处理它.

如果有人知道,一些脚手架代码会有所帮助.万分感谢.

java android android-asynctask android-loader

9
推荐指数
1
解决办法
2613
查看次数

在使用Jackson进行反序列化时,如何放松命名策略?

我一直在尝试升级JSON模块以使用Jackson的FasterXML(2.6.3)版本而不是旧的Codehaus模块.在升级过程中,我注意到使用FasterXML而不是Codehaus时命名策略有所不同.

Codehaus在命名策略方面更灵活.下面的测试突出了我用FasterXML面临的问题.我如何配置ObjectMapper它遵循Codehaus相同的策略?

我不能改变JSONProperty注释,因为有数百个注释.我希望升级在命名策略方面向后兼容.

import java.io.IOException;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
/*import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.PropertyNamingStrategy;*/
import org.junit.Assert;
import org.junit.Test;

public class JSONTest extends Assert {

    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Product {

        @JsonProperty(value = "variationId")
        private String variantId;

        @JsonProperty(value = "price_text")
        private String priceText;

        @JsonProperty(value = "listPrice")
        public String listPrice;

        @JsonProperty(value = "PRODUCT_NAME")
        public String name;

        @JsonProperty(value = "Product_Desc")
        public String description;
    }

    private static final String VALID_PRODUCT_JSON = …
Run Code Online (Sandbox Code Playgroud)

java json jackson fasterxml jackson-modules

9
推荐指数
1
解决办法
3028
查看次数

如何创建打开"呼叫日志活动"的Intent?

我想创建一个Intent,打开屏幕显示当前设备的通话记录?

我如何指定这样的意图?

android calllog android-intent

8
推荐指数
2
解决办法
8417
查看次数

如何强制onPrepareOptionsMenu方法触发?

在我的activity的onCreateOptionsMenu方法中,我只是夸大我的菜单布局文件并附加它.

我想基于全局变量的值a显示/隐藏一些菜单项,我在onPrepareOptionsMenu方法中这样做.我已经读到这是正确的做法.

我的onPrepareOptionsMenu方法并不总是开火.我不知道为什么,但是当我按下手机上的"菜单"按钮时,它并不总是会触发.也许它与内部状态有关.

在创建Acitvity时似乎会触发它.第一次按"菜单"按钮不会导致它触发,但如果我再次按下菜单按钮,它就可以正常工作.

有没有办法可以迫使它onPrepareOptionsMenu开火.

谢谢


Smok建议使用该invalidateOptionsMenu方法使菜单项无效,但这会导致onCreateOptionsMenu方法触发.这是我的方法:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    System.out.println("onCreate");

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.search, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconified(false);
    searchView.requestFocusFromTouch();

    return true;

}

@Override
public boolean onPrepareOptionsMenu (Menu menu) {
    System.out.println("prepared");

    if (this.objAdapter == null) {
        menu.findItem(R.id.sort).setVisible(false);
        menu.findItem(R.id.filter).setVisible(false);
        menu.findItem(R.id.group).setVisible(false);
    } else {
        menu.findItem(R.id.sort).setVisible(true);
        menu.findItem(R.id.filter).setVisible(true);
        menu.findItem(R.id.group).setVisible(true);

    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

从我的onCreateOptionsMenu方法中可以看出,再次调用它会导致焦点丢失SearchView.

java android android-menu

8
推荐指数
1
解决办法
6477
查看次数

无法构建GCM演示服务器应用程序

每当我尝试使用文档构建GCM演示服务器时ant,我会得到17个编译错误.似乎缺少一些GCM库.我该如何解决这些问题?

 Errors:

  Buildfile: build.xml

init:

compile:
    [javac] Compiling 7 source files to /root/gcm/samples/gcm-demo-server/build/classes
    [javac] /root/gcm/samples/gcm-demo-server/src/com/google/android/gcm/demo/server/SendAllMessagesServlet.java:18: package com.google.android.gcm.server does not exist
    [javac] import com.google.android.gcm.server.Constants;
    [javac]                                     ^
    [javac] /root/gcm/samples/gcm-demo-server/src/com/google/android/gcm/demo/server/SendAllMessagesServlet.java:19: package com.google.android.gcm.server does not exist
    [javac] import com.google.android.gcm.server.Message;
    [javac]                                     ^
    [javac] /root/gcm/samples/gcm-demo-server/src/com/google/android/gcm/demo/server/SendAllMessagesServlet.java:20: package com.google.android.gcm.server does not exist
    [javac] import com.google.android.gcm.server.MulticastResult;
    [javac]                                     ^
    [javac] /root/gcm/samples/gcm-demo-server/src/com/google/android/gcm/demo/server/SendAllMessagesServlet.java:21: package com.google.android.gcm.server does not exist
    [javac] import com.google.android.gcm.server.Result;
    [javac]                                     ^
    [javac] /root/gcm/samples/gcm-demo-server/src/com/google/android/gcm/demo/server/SendAllMessagesServlet.java:22: package com.google.android.gcm.server does not exist
    [javac] import com.google.android.gcm.server.Sender;
    [javac]                                     ^
    [javac] /root/gcm/samples/gcm-demo-server/src/com/google/android/gcm/demo/server/SendAllMessagesServlet.java:46: cannot …
Run Code Online (Sandbox Code Playgroud)

java ant android google-cloud-messaging

8
推荐指数
1
解决办法
4052
查看次数

如何在RabbitMQ中查看排队的任务?

我正在使用RabbitMQ作为我的消息代理,我的工作人员是芹菜任务.我正在尝试诊断一个问题,我将任务排入RabbitMQ,但Celery不会选择.

有没有办法可以检查RabbitMQ中哪些任务被排队?我想查看它们排队的日期和时间,指定任何ETA,参数和任务名称.

我无法在文档中找到这些信息 - 也许我忽略了它 - 并希望你们中的一些人可能知道检查任务队列的简单方法.谢谢.

python rabbitmq celery

8
推荐指数
2
解决办法
7071
查看次数