小编Dan*_*n K的帖子

Python Selenium滚动到Clusterize生成的div的底部

我正在开发一个Django项目,该项目利用Clusterize.js动态加载div中的"datapoints"列表.在Javascript/HTML方面,最初加载"blackbox"的前200个数据点.如果还有更多,则工作者一次开始加载1000个数据点,直到在滚动列表中获取并呈现所有数据点.当用户单击数据点时,将显示该数据点的详细信息.

最初,有一个错误会导致199以后的任何数据点出现错误的细节.一旦加载任何黑盒子的任何新数据点超过199,错误的数据点ID将传递给Javascript函数showDatapointDetail,datapoint 200将获得详细信息对于数据点0,数据点201会得到详细为数据点1,等等,直到数据点1199将获取的数据点999的细节.然后数据点1200将获得0和模式将重复.我已经修复了Javascript代码中的这个错误,但现在我正在编写一个很好的测试,tests.py以确保点击200以上的数据点获得正确的详细信息.该项目一直在使用Python selenium进行大量的浏览器测试,现在我试图弄清楚如何使用它滚动到动态生成的div的底部.如果我这样做:

dp_detail_199 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "datapoint199")))
Run Code Online (Sandbox Code Playgroud)

然后我可以正确地获得该数据点细节,因为最初只加载了200个.但是,如果黑盒子有787个数据点,那么以下内容将不起作用:

dp_detail_750 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "datapoint750")))
Run Code Online (Sandbox Code Playgroud)

因为需要向下滚动才能开始加载下一个数据点.那么如何使用Selenium滚动到Clusterize生成的列表的底部?div被命名dp_pane,我可以用Selenium找到它,但我不确定如何正确向下滚动,特别是向下滚动.我尝试过的一件事是首先向下滚动dp_pane:

driver.execute_script("arguments[0].scrollTop = 12000", dp_pane)
Run Code Online (Sandbox Code Playgroud)

下到datapoint 200,然后向下滚动一点,找到数据点205:

while True:
    dp_pane.send_keys(Keys.PAGE_DOWN)
    try:
        dp_detail_205 = driver.find_element_by_id("datapoint205")
    except NoSuchElementException:
        ######## DEBUG OUTPUT #########
        print "Couldn't find dp_detail_205" 
        continue
    else:
        ######## DEBUG OUTPUT #########
        print "Found it!"
        break
Run Code Online (Sandbox Code Playgroud)

但这似乎陷入困境,从未找到数据点205; 相反,我只是继续获得调试输出"Couldn't find dp_detail_205".我应该怎么做才能让Selenium滚动到底部,dp_pane以便我可以找到,例如,datapoint750并验证它是否具有正确的详细信息?最终,我需要的是Selenium让Clusterize加载更多的行,因为这是我需要的一件事,这个测试工作根本没用.甚至Clusterize自己的编程滚动方法也不起作用; 我将使用的行将是这样的:

document.getElementById('dp_pane').scrollTop = 12000;
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,无论我使用scrollTop值多大,它都只能达到数据点199的最低值,并且不会自动加载更多的行.

编辑:

我最近将项目升级到Django 1.9,其中包括与QUnit的集成.乍一看,我认为这是测试Selenium的理想替代品.但是,现在我在阅读一些文件后不确定; 首先,测试涉及首先上传.dat文件,我不确定QUnit可以用于.此外,它可以在Travis CI中轻松实现自动化吗?试图为此进行工作测试已经证明是艰巨的,我不确定在这一点上我还能尝试什么.

javascript python django selenium

6
推荐指数
0
解决办法
543
查看次数

Celery+Django -- 使用 Django 消息框架对状态进行轮询任务并报告成功或失败

在我使用 Celery 的 Django 项目(以及其他一些东西)中,我有一个 Celery 任务,它将在后台将文件上传到数据库。我使用轮询来跟踪上传进度并显示上传进度条。以下是一些详细说明上传过程的片段:

视图.py:

from .tasks import upload_task
...

upload_task.delay(datapoints, user, description) # datapoints is a list of dictionaries, user and description are simple strings
Run Code Online (Sandbox Code Playgroud)

任务.py:

from taskman.celery import app, DBTask # taskman is the name of the Django app that has celery.py
from celery import task, current_task

@task(base=DBTask)
def upload_task(datapoints, user, description):
    from utils.db.databaseinserter import insertIntoDatabase
    for count in insertIntoDatabase(datapoints, user, description):
        percent_completion = int(100 * (float(count) / float(len(datapoints))))
        current_task.update_state(state='PROGRESS', meta={'percent':percent_completion})
Run Code Online (Sandbox Code Playgroud)

数据库插入器.py:

def insertIntoDatabase(datapoints, user, …
Run Code Online (Sandbox Code Playgroud)

javascript python django jquery celery

5
推荐指数
1
解决办法
1642
查看次数

AWS:Docker Compose项目的CodeDeploy?

我目前的目标是让Travis在我们的Git master分支成功合并拉取请求后部署我们的Django + Docker-Compose项目.我已经完成了一些设置我们的AWS CodeDeploy的工作,因为Travis已经内置了对它的支持.当我到达AppSpec和实际部署部分时,首先我尝试使用AfterInstall脚本docker-compose build,然后使用ApplicationStart脚本docker-compose up.从Web中提取图像的容器是我们的PostgreSQL容器(命名为dbimage aidanlister/postgres-hstore,这是通常的postgres图像加上hstore扩展名),Redis容器(使用redis图像)和Selenium容器(图像selenium/standalone-firefox).其他两个容器,web以及worker,分别Django的服务器和芹菜工作者,使用相同的Dockerfile构建的图像.主要命令是:

CMD paver docker_run
Run Code Online (Sandbox Code Playgroud)

它使用一个pavement.py文件:

from paver.easy import task
from paver.easy import sh

@task
def docker_run():
    migrate()
    collectStatic()
    updateRequirements()
    startServer()

@task
def migrate():
    sh('./manage.py makemigrations --noinput')
    sh('./manage.py migrate --noinput')

@task
def collectStatic():
    sh('./manage.py collectstatic --noinput')

# find any updates to existing packages, install any new packages
@task
def updateRequirements():
    sh('pip install --upgrade -r requirements.txt') …
Run Code Online (Sandbox Code Playgroud)

django amazon-ec2 amazon-web-services travis-ci docker-compose

5
推荐指数
1
解决办法
2692
查看次数

Django GenericRelation仍然无法从GenericForeignKey启用反向查询

在我的Django项目中,我有一个名为ValueGenericForeignKey 的模型:

class Value(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, blank=True, null=True)
    val_id = models.PositiveIntegerField(blank=True, null=True)
    data_obj = GenericForeignKey('content_type', 'val_id')
Run Code Online (Sandbox Code Playgroud)

Value是一种多态表,它使用ContentType和GenericForeignKey来指向包含实际数据的任意表.例如,有一个模型Int,一个Value可以指向:

class Int(models.Model):
    data = models.IntegerField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

因此,在创建一个实例后Int:

myint = Int.objects.create(data=1)
Run Code Online (Sandbox Code Playgroud)

我可以创建一个Value指向它的:

myval = Value.objects.create(data_obj=myint)
Run Code Online (Sandbox Code Playgroud)

还有其他同类机型,一个Value将指向,比如UInt,StringFloat; 他们都只有一个领域data.但是,我想知道如何Value根据字段指向的模型包含的数据查询/过滤实例data_obj.即,我希望能够做到这样的事情:

Value.objects.filter(data_obj__data=1)
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/django/db/models/manager.py", line 122, in manager_method
    return …
Run Code Online (Sandbox Code Playgroud)

python django

5
推荐指数
2
解决办法
3073
查看次数

Redis+Docker+Django - 错误 111 连接被拒绝

我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理。我无法弄清楚我到底做错了什么,但尽管控制台日志消息告诉我 Redis 正在运行并接受连接(事实上,当我这样做时docker ps,我可以看到容器正在运行),我仍然收到有关连接被拒绝的错误。我什至做了

docker exec -it <redis_container_name> redis-cli
ping
Run Code Online (Sandbox Code Playgroud)

并看到响应是PONG

这是我的 celery 设置settings.py

BROKER_URL = 'redis://localhost:6379/0'
BROKER_TRANSPORT = 'redis'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
CELERY_TIMEZONE = "UTC"
Run Code Online (Sandbox Code Playgroud)

这是我的 Redis 容器设置docker-compose.yml

redis:
    image: redis
    ports:
        - "6379:6379"
Run Code Online (Sandbox Code Playgroud)

我还记得将redis容器与我的web容器链接起来。我可以很好地启动服务器,但是当我尝试将任何内容上传到站点时,出现连接被拒绝的错误。究竟出了什么问题?

编辑:我记得使用 VBoxManage 进行端口转发,这样我就可以转到我的浏览器并访问我的站点localhost:8000,因此似乎我不需要使用 VM 的 IP 而不是localhost …

django redis docker

4
推荐指数
2
解决办法
4832
查看次数

Celery + Django-KeyError未注册任务

我快要让Celery与Django + Docker-Compose项目一起工作了,但是我遇到了一个问题,即工作人员永远无法识别分配给它的任务。基本思想是我有一个insertIntoDatabase从任务中调用的函数:

myapp / tasks.py:

@task(name='tasks.db_ins')
def db_ins_task(datapoints, user, description):
    from utils.db.databaseinserter import insertIntoDatabase
    insertIntoDatabase(datapoints, user, description)
Run Code Online (Sandbox Code Playgroud)

在中views.py,我这样做:

from .tasks import db_ins_task
...
db_ins_task.delay(datapoints, user, description)
Run Code Online (Sandbox Code Playgroud)

datapoints基本上是字典列表,user并且description仅仅是字符串。问题是,当Celery worker容器启动时,db_ins_task从来没有将其作为列出的任务之一,因此,当我尝试将任何内容上传到我的网站时,会出现以下错误:

worker_1   | [2015-09-25 19:38:00,205: ERROR/MainProcess] Received unregistered task of type u'tasks.db_ins'.
worker_1   | The message has been ignored and discarded.
worker_1   | 
worker_1   | Did you remember to import the module containing this task?
worker_1   | Or maybe you are …
Run Code Online (Sandbox Code Playgroud)

python django celery docker-compose

3
推荐指数
1
解决办法
3249
查看次数