国际日期 "String" 正在减去而不是保留其原始格式
International Date "String" Is Subtracting Instead of Remaining in Its Original Format
在使用 Python 的 Selenium 时,我试图 "inject"(我的术语,execute_script()
调用的 b/c)以下国际日期字符串格式:
date_string = `"2015-05-15"`
不幸的是,注入 date_string
结果是 subtraction 而不是字符串(在本例中 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()
出现在 treat dashes as subtraction signs)。
我已经尝试了所有我能想到的方法来验证我的 format()
假设,包括尝试转义破折号 ("2015--15")、转义大括号 ({{0}}
),将字符串包装在 str()
方法中,并在 format()
方法本身中构造 date_string
(例如 format("2015" +'-' +"05"+'-'+"15")
)。另外,我试图完全避免使用 format()
,而是使用 %s
。它们都导致 1995
而不是 2015-05-15
.
我有点不知所措,因为我不知道如何避免这个问题,而这正是网站要求的格式。还有其他人遇到过这个问题吗?预先感谢您的帮助。
format
函数没有问题,但是看这个:
>>> "document.getElementById('ad_start_date').value = {0};".format("2015-05-15")
"document.getElementById('ad_start_date').value = 2015-05-15;"
日期不再是字符串,而是整数!
修复
您可以通过添加额外的撇号来解决此问题: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";'
有点不方便,不过可以用datepicker-api:
var d="2015-05-15";
var dateFormated = $.datepicker.formatDate('yy-mm-dd', new Date(d));
在使用 Python 的 Selenium 时,我试图 "inject"(我的术语,execute_script()
调用的 b/c)以下国际日期字符串格式:
date_string = `"2015-05-15"`
不幸的是,注入 date_string
结果是 subtraction 而不是字符串(在本例中 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()
出现在 treat dashes as subtraction signs)。
我已经尝试了所有我能想到的方法来验证我的 format()
假设,包括尝试转义破折号 ("2015--15")、转义大括号 ({{0}}
),将字符串包装在 str()
方法中,并在 format()
方法本身中构造 date_string
(例如 format("2015" +'-' +"05"+'-'+"15")
)。另外,我试图完全避免使用 format()
,而是使用 %s
。它们都导致 1995
而不是 2015-05-15
.
我有点不知所措,因为我不知道如何避免这个问题,而这正是网站要求的格式。还有其他人遇到过这个问题吗?预先感谢您的帮助。
format
函数没有问题,但是看这个:
>>> "document.getElementById('ad_start_date').value = {0};".format("2015-05-15")
"document.getElementById('ad_start_date').value = 2015-05-15;"
日期不再是字符串,而是整数!
修复
您可以通过添加额外的撇号来解决此问题: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";'
有点不方便,不过可以用datepicker-api:
var d="2015-05-15";
var dateFormated = $.datepicker.formatDate('yy-mm-dd', new Date(d));