国际日期“字符串”正在减去而不是以其原始格式保留

时间:2015-04-18 19:33:41

标签: javascript python python-2.7 selenium selenium-webdriver

使用Python的Selenium时,我正试图注入"注入" (我的术语,execute_script()来电的b / c)国际日期字符串,格式如下:

date_string = `"2015-05-15"`  

不幸的是,注入date_string会导致减法而不是字符串(date_string等同于1995在本例中)。以下是相关代码段的内容:

element = self.wait.until(EC.visibility_of_element_located((By.XPATH, '//input[@id="ad_start_date"]'))) #locate the element
self.driver.execute_script("document.getElementById('ad_start_date').value = {0};".format("2015-05-15")) #"inject" the `date_string` which surprisingly results in `1995`

因此,换句话说,我找到相关元素(日期字段),然后尝试通过JavaScript注入event_date。我怀疑该问题是value = {}行或format()方法(format()出现format())。

我已经尝试了一切我能想到的来测试我的{{0}}假设,包括试图逃避破折号(" 2015- \ 05-15"),逃避大括号({} {1}}),将字符串包装在str()方法中,并在date_string方法本身内构建format()(例如format("2015" +'-' +"05"+'-'+"15"))。另外,我试图完全避免format(),而是依赖于%s。它们都会产生1995而不是2015-05-15

我有点茫然,因为我不知道如何避免这个问题以及该网站所需的格式。还有其他人遇到过这个问题吗?提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

format函数不是问题,但请看一下:

>>> "document.getElementById('ad_start_date').value = {0};".format("2015-05-15")
"document.getElementById('ad_start_date').value = 2015-05-15;"

date 不再是一个字符串,它是一个整数!

修复

您可以通过添加额外的撇号来解决此问题:date_string = '"2015-05-15"' 正常的撇号确保它是Python的字符串,双撇号确保它是Javascript的字符串。

>>> "document.getElementById('ad_start_date').value = {0};".format('"2015-05-15"')
'document.getElementById(\'ad_start_date\').value = "2015-05-15";'

答案 1 :(得分:1)

这有点不方便,但您可以使用datepicker-api:

var d="2015-05-15";
var dateFormated = $.datepicker.formatDate('yy-mm-dd', new Date(d));