Javascript “国际日期”;“字符串”;是减法,而不是保留其原始格式
在使用Python的Selenium时,我试图以以下格式“注入”(我的术语,一个Javascript “国际日期”;“字符串”;是减法,而不是保留其原始格式,javascript,python,python-2.7,selenium,selenium-webdriver,Javascript,Python,Python 2.7,Selenium,Selenium Webdriver,在使用Python的Selenium时,我试图以以下格式“注入”(我的术语,一个execute\u script()call的b/c)一个国际日期字符串: date_string = `"2015-05-15"` 不幸的是,注入date_字符串会导致减法而不是字符串(date_字符串在本例中等于1995)。以下是相关代码段的外观: element = self.wait.until(EC.visibility_of_element_located((By.XPATH, '//input[@
execute\u script()
call的b/c)一个国际日期字符串:
date_string = `"2015-05-15"`
不幸的是,注入date_字符串
会导致减法而不是字符串(date_字符串
在本例中等于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\u date
。我怀疑问题出在value={}
行或format()
方法上(因为format()
似乎有问题)
我已经尝试了我所能想到的一切来测试我的format()
假设,包括试图避开破折号(“2015-\05-15”)、避开花括号({{0}}
),用str()
方法包装字符串,以及在format()
方法本身中构造日期字符串
(例如,格式(“2015”+“-”+“05”+“-”+“+”-“+“15”)
)。此外,我试图完全避免格式()
,而是依赖%s
。它们都会导致1995
,而不是2015-05-15
我有点不知所措,因为我不知道如何避免这个问题,而这正是网站需要的格式。还有其他人遇到过这个问题吗?提前感谢您的帮助。格式功能不是问题,但请看以下内容:
>>> "document.getElementById('ad_start_date').value = {0};".format("2015-05-15")
"document.getElementById('ad_start_date').value = 2015-05-15;"
日期不再是字符串,而是整数
修理
您可以通过添加额外的撇号来解决此问题:date\u 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));