使用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
。
我有点茫然,因为我不知道如何避免这个问题以及该网站所需的格式。还有其他人遇到过这个问题吗?提前感谢您的帮助。
答案 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));