小编Mic*_*elR的帖子

Python:时间输入验证

我有一个问题,我应该以10:10:10(hh:mm:ss)或10:10(mm:ss)或10(ss)的形式获得用户输入.现在我需要检查以下参数:

  • 如果我只有几秒钟,那么没有限制.
  • 如果我得到mm:ss那么秒被限制为0..59并且分钟是无限的.
  • 如果我得到了,hh:mm:ss那么秒和分钟都限制在0..59,而小时是无限的.

然后返回一个TimeDelta对象.

天真的方法是编写乘法if语句来检查所有这些.但我正在寻找一种更顺畅的方式.

val = "11:66:11"
try:
    val = map(int, val.split(':'))
except ValueError:
    return False
if len(val) == 1:
    return val
if len(val) == 2:
    if val[1] > 59:
        print  "Bad seconds"
        return False
if len(val) == 3:
    if val[2] > 59 or val[1] >59:
        print  "Bad seconds / minutes"
        return False
while len(val) < 3:
        split.insert(0,0)
return = timedelta(hours=split[0],minutes=split[1],seconds=split[2])
Run Code Online (Sandbox Code Playgroud)

python date python-2.7

7
推荐指数
1
解决办法
635
查看次数

使用watir-webdriver打开多个线程会导致"连接被拒绝"错误

我有这个简单的例子:

require 'watir-webdriver'

arr = []
sites = [
"www.google.com",
"www.bbc.com",
"www.cnn.com",
"www.gmail.com"
]

sites.each do |site|
    arr << Thread.new {
        b = Watir::Browser.new :chrome
        b.goto site
        puts b.url
        b.close
    }
end
arr.each {|t| t.join}
Run Code Online (Sandbox Code Playgroud)

每次我运行这个脚本,我都会

ruby/2.1.0/net/http.rb:879:in `initialize': Connection refused - connect(2) for "127.0.0.1"      port 9517 (Errno::ECONNREFUSED)
Run Code Online (Sandbox Code Playgroud)

或者其中一个浏览器在至少其中一个线程上意外关闭.

另一方面,如果我sleep 2在每个循环周期结束时设置,一切运行顺利!知道为什么会这样吗?

必须与理解线程如何工作有关...

ruby selenium multithreading watir-webdriver

6
推荐指数
1
解决办法
2585
查看次数

将 watir-webdriver 连接到现有窗口

是否可以将 watir-webdriver 附加到已打开的浏览器窗口?

watir watir-webdriver

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

等待元素,如果超时则不会引发异常

我知道该方法Element#wait_until_present(t),但是如果此方法超时,则会引发timeOut异常。

有没有一种方法可以等待t几秒钟,然后在元素存在时返回true,否则返回false?

我知道可以通过一个简单的begin..rescue..end语句来完成,但是我正在寻找不使用异常的东西。

ruby watir watir-webdriver

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

从watir webdriver中的span元素中检索文本

我有以下内容:

<ul class="a">
  <li class="b">
    <a class="c">
      <span class="d">
        <strong>text</strong>
      </span>
    </a>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我正试图从跨度中获取"文本".

当我尝试:

puts browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d')
Run Code Online (Sandbox Code Playgroud)

我把span元素拿回来了.#<Watir::Span:0x007fa1d11edb18>我应该这样做.

但在尝试时:

puts browser.ul( :class =>'a').li( :class =>'b').link(:class =>'c').span(:class =>'d').text
Run Code Online (Sandbox Code Playgroud)

我得到一个错误说:

unable to locate element, using {:class=>'b', :tag_name=>"li"}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

watir watir-webdriver

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

如何从format()方法的字符串中获取变量名称

可以说我有这条线:

"My name is {name}".format(name="qwerty")
Run Code Online (Sandbox Code Playgroud)

我知道变量名是name,所以我可以填写它.但是,如果内部的词{}总是在变化,如下:

"My name is {name}"
"My name is {n}"
"My name is {myname}"
Run Code Online (Sandbox Code Playgroud)

我希望能够这样做:

"My name is {*}".format(*=get_value(*))
Run Code Online (Sandbox Code Playgroud)

哪里*是什么都词是内给定{}

希望我很清楚.


编辑:

def get_value(var):
    return mydict.get(var)

def printme(str):
    print str.format(var1=get_value(var1), var2=get_value(var2))

printme("my name is {name} {lastname}")
printme("your {gender} is a {sex}")
Run Code Online (Sandbox Code Playgroud)

有了这个,我不能硬编码printme函数内部的任何变量.

python

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

Python 日志记录:我可以将参数传递给 json 配置文件中的自定义处理程序吗

我已经阅读了文档,但没有发现任何提及。是否可以将参数传递给 json 配置文件中的自定义 logging.handler 类?

"handlers": {
    "custom_handler": {
        "class": "logging.CustomHandler",
        "args": ['a', 'b'] # <------------------------            
        "level": "INFO",
        "formatter": "custom"
    }
},
Run Code Online (Sandbox Code Playgroud)

处理程序类定义在哪里:

class CustomHandler(logging.Handler):
    def __init__(self, argA, argB):
        super().__init__()
        self.a = argA
        self.b = argB
    def emit(self, record):
        <Some code>
Run Code Online (Sandbox Code Playgroud)

python logging python-3.6

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

Watir测量页面性能

我找到了这个宝石:http://watirwebdriver.com/page-performance/

但我似乎无法理解这是什么措施

browser.performance.summary[:response_time]/1000
Run Code Online (Sandbox Code Playgroud)

从第二次打开浏览器开始测量吗?

Watir::Browser.new :chrome
Run Code Online (Sandbox Code Playgroud)

还是从最后的Watir-webdriver命令写的?

我怎样才能启动计时器?

**我已经尝试了几个脚本,但我一直都会得到0 seconds 这就是为什么我不确定.**

watir watir-webdriver

0
推荐指数
1
解决办法
345
查看次数