国际日期 "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));