小编ale*_*cxe的帖子

函数参数中裸星号的目的是什么?

我已经看到了这个问题(这不是重复的):Python在函数参数中显示星号

在python-3.x中你可以*为函数参数添加一个裸,这意味着(引自docs):

"*"或"*identifier"之后的参数是仅关键字参数,并且只能传递使用的关键字参数.

好的,我已经定义了一个函数:

>>> def f(a, b, *, c=1, d=2, e=3):
...     print('Hello, world!')
... 
Run Code Online (Sandbox Code Playgroud)

我可以通过c,de变量值只能通过指定关键字:

>>> f(1, 2, 10, 20, 30)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes 2 positional arguments but 5 were given
>>> f(1, 2, c=10, d=20, e=30)
Hello, world!
Run Code Online (Sandbox Code Playgroud)

问题是:

  • 这种限制/语法糖的动机是什么?
  • 它涵盖了哪些用例?
  • 它真的用在切换到python3的第三方库中吗?

一些"真实世界"的例子会有很大帮助.提前致谢.

python arguments function keyword-argument python-3.x

19
推荐指数
1
解决办法
1735
查看次数

如果不安装django.contrib.messages.middleware.MessageMiddleware,则无法添加消息

我是Django的新手.我正在尝试运行应用程序,我需要向管理员添加新用户.服务器正在运行.当我输入信息冷杉新用户并点击"保存"时,我收到以下错误.我正在使用django-trunk.

MessageFailure at /admin/auth/user/add/
You cannot add messages without installing
django.contrib.messages.middleware.MessageMiddleware

Request Method: POST
Request URL:    http://localhost:8000/admin/auth/user/add/
Django Version: 1.6.dev20130403090717
Exception Type: MessageFailure
Exception Value:    You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware
Run Code Online (Sandbox Code Playgroud)

关于可能发生什么的任何想法?

django django-admin

18
推荐指数
4
解决办法
8588
查看次数

获取chrome性能并跟踪日志

我正在尝试使用WebDriver谷歌测试自动化会议谈话和ChromeDriver "性能日志"文档页面来遵循网络性能测试中提出的想法,以获取我想要提交到网页测试以便稍后进行性能分析的跟踪数据.

如何使用python selenium绑定检索性能日志?


我试图log_types在驱动程序实例中打印出来

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://stackoverflow.com')

print driver.log_types

driver.close()
Run Code Online (Sandbox Code Playgroud)

但只有

[u'browser', u'driver']
Run Code Online (Sandbox Code Playgroud)

而且我没有看到相关的命令行开关.

python selenium google-chrome selenium-chromedriver selenium-webdriver

18
推荐指数
1
解决办法
8077
查看次数

使用Protractor定位元素指令中的元素

考虑以下视图模型:

$scope.data = {};
$scope.data.person = {};
$scope.data.person.firstname = "";
$scope.data.person.lastname = "";
$scope.data.person.username = "";
Run Code Online (Sandbox Code Playgroud)

以及以下元素指令:

<custom-form-directive ng-model="data.person"></custom-form-directive>
Run Code Online (Sandbox Code Playgroud)

其中包含三个输入标签来显示数据.如何使用量角器通过定位填充输入字段ng-model="data.person"

javascript angularjs protractor

18
推荐指数
2
解决办法
4418
查看次数

在条件求值为true时获取元素(扩展ElementArrayFinder)

我们有一个菜单表示为一个ul->li列表(简化):

<ul class="dropdown-menu" role="menu">
    <li ng-repeat="filterItem in filterCtrl.filterPanelCfg track by filterItem.name"
        ng-class="{'divider': filterItem.isDivider}" class="ng-scope">
        <a href="" class="ng-binding"> Menu Item 1</a>
    </li>
    ...
    <li ng-repeat="filterItem in filterCtrl.filterPanelCfg track by filterItem.name"
        ng-class="{'divider': filterItem.isDivider}" class="ng-scope">
        <a href="" class="ng-binding"> Menu Item 2</a>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

在位置N的某处,有一个分隔符,可以通过评估 filterItem.isDivider或通过检查a链接的文本来识别(在分隔符的情况下,它是空的).

现在,目标是获取位于分隔符之前的所有菜单项.你会如何解决这个问题?


我目前的方法相当通用 - 扩展ElementArrayFinder和添加takewhile()功能(受Python的启发itertools.takewhile()).以下是我实现它的方法(基于filter()):

protractor.ElementArrayFinder.prototype.takewhile = function(whileFn) {
    var self = this;
    var getWebElements = function() {
        return self.getWebElements().then(function(parentWebElements) {
            var list = []; …
Run Code Online (Sandbox Code Playgroud)

javascript iteration selenium selenium-webdriver protractor

18
推荐指数
1
解决办法
987
查看次数

获取当前选定的文本

我尝试使用输入中的当前选定文本,window.getSelection()但我总是得到一个空字符串:

expect(browser.executeScript("return window.getSelection().toString();")).toEqual("test");
Run Code Online (Sandbox Code Playgroud)

结果成:

Expected '' to equal 'test'.
Run Code Online (Sandbox Code Playgroud)

使用angularjs.org作为目标站点的完整可重复测试:

describe("My test", function () {
    beforeEach(function () {
        browser.get("https://angularjs.org/");
    });

    it("should select text in an input", function () {
        var query = element(by.css("input.search-query"));
        query.sendKeys("test");
        query.sendKeys(protractor.Key.chord(protractor.Key.COMMAND, "a"));

        expect(browser.executeScript("return window.getSelection().toString();")).toEqual("test");
    });
});
Run Code Online (Sandbox Code Playgroud)

请注意,我实际上看到输入的文本是使用COMMAND +"a"选择的.

我究竟做错了什么?

使用量角器2.5.1,firefox 41.

javascript selenium end-to-end selenium-webdriver protractor

18
推荐指数
1
解决办法
1313
查看次数

使用parentElementArrayFinder定位父元素

根据我的理解,对象上有一个parentElementArrayFinder属性ElementFinder可以返回当前的父元素:

var myElement = $(".myclass");
var parentElement = myElement.parentElementArrayFinder;
Run Code Online (Sandbox Code Playgroud)

但是,它没有记录为Protractor的公共API的一部分.是parentElementArrayFinder一个可靠而稳定的方法来定位父元素,并始终返回相同的元素myElement.element(by.xpath(".."))

javascript selenium selenium-webdriver protractor

18
推荐指数
1
解决办法
1781
查看次数

使用Selenium扩展(Python)

我目前正在使用Selenium来运行Chrome实例以测试网页.每次我的脚本运行时,都会启动一个干净的Chrome实例(清除扩展名,书签,浏览历史记录等).我想知道是否可以使用Chrome扩展程序运行我的脚本.我已经尝试过搜索Python示例,但是当我用Google搜索时没有出现任何问题.

python selenium google-chrome selenium-webdriver

17
推荐指数
3
解决办法
2万
查看次数

Python BeautifulSoup刮表

我正在尝试用BeautifulSoup创建一个表刮.我写了这个Python代码:

import urllib2
from bs4 import BeautifulSoup

url = "http://dofollow.netsons.org/table1.htm"  # change to whatever your url is

page = urllib2.urlopen(url).read()
soup = BeautifulSoup(page)

for i in soup.find_all('form'):
    print i.attrs['class']
Run Code Online (Sandbox Code Playgroud)

我需要刮Nome,Cognome,Email.

html python beautifulsoup html-parsing web-scraping

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

在BeautifulSoup中扩展CSS选择器

问题:

BeautifulSoupCSS选择器提供非常有限的支持.例如,唯一支持的伪类是nth-of-type,它只能接受数值 - 参数喜欢evenodd不允许.

是否可以扩展BeautifulSoupCSS选择器或让它在lxml.cssselect内部用作底层CSS选择机制?


我们来看一个示例问题/用例.在以下HTML中仅查找偶数行:

<table>
    <tr>
        <td>1</td>
    <tr>
        <td>2</td>
    </tr>
    <tr>
        <td>3</td>
    </tr>
    <tr>
        <td>4</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

lxml.html和中lxml.cssselect,很容易做到:nth-of-type(even):

from lxml.html import fromstring
from lxml.cssselect import CSSSelector

tree = fromstring(data)

sel = CSSSelector('tr:nth-of-type(even)')

print [e.text_content().strip() for e in sel(tree)]
Run Code Online (Sandbox Code Playgroud)

但是,在BeautifulSoup:

print(soup.select("tr:nth-of-type(even)"))
Run Code Online (Sandbox Code Playgroud)

会抛出错误:

NotImplementedError:nth-​​of-type伪类目前仅支持数值.


请注意,我们可以解决此问题.find_all():

print([row.get_text(strip=True) for index, row in enumerate(soup.find_all("tr"), start=1) if …
Run Code Online (Sandbox Code Playgroud)

python beautifulsoup css-selectors html-parsing lxml.html

17
推荐指数
1
解决办法
1701
查看次数