Javascript 为什么驱动程序_execute的值为空
我正在尝试将文本发送到textfieldJavascript 为什么驱动程序_execute的值为空,javascript,python-3.x,selenium,firefox,selenium-webdriver,Javascript,Python 3.x,Selenium,Firefox,Selenium Webdriver,我正在尝试将文本发送到textfield binary = FirefoxBinary("C:\Program Files\Mozilla Firefox\Firefox.exe") driver = webdriver.Firefox(firefox_binary=binary) text = 'sending something to the text area' input_field = driver.find_element_by_css_selector('.trumbowyg
binary = FirefoxBinary("C:\Program Files\Mozilla Firefox\Firefox.exe")
driver = webdriver.Firefox(firefox_binary=binary)
text = 'sending something to the text area'
input_field = driver.find_element_by_css_selector('.trumbowyg-editor')
input_field.clear()
driver.execute_script("arguments[0].value = arguments[1];", input_field, 'sending something to the text area')
但它不起作用,什么都不做,也没有任何错误
此外,我还尝试了以下方法:
binary = FirefoxBinary("C:\Program Files\Mozilla Firefox\Firefox.exe")
driver = webdriver.Firefox(firefox_binary=binary)
text = 'sending something to the text area'
input_field = driver.find_element_by_css_selector('.trumbowyg-editor')
input_field.clear()
driver.send_keys(text)
它是有效的。但是,我想用javascript代码发送文本,因为它比
driver.send_keys()
命令更快。如果python绑定到selenium的工作方式类似于java绑定,那么脚本执行者期望的是一个字符串,其中包含javascirpt,可以在浏览器控制台中执行以获得所需的结果
在这种情况下,将input_字段(可能是某个python对象)传递给脚本执行器不会起作用。您希望传递给它的是:
driver.execute_script('document.getElementsByClassName("trumbowyg-editor")[0].setAttribute("value", arguments[0]);','sending something to the text area')
这意味着搜索元素也必须在脚本中完成。这对我不起作用。我发现错误,参数[1]未定义。因此,我找到了另一种解决方法:驱动程序。执行_脚本(“参数[0]。innerHTML=arguments[1];”,输入_字段,“向文本区域发送内容”),但这样会出现奇怪的问题,替换的值未保存。确定。我的坏(我不是来自python世界)。Ofc它应该是参数[0],因为我已经从函数调用中删除了一个参数。另外,我有一个输入错误类名必须没有“.”前缀。这里的关键是首先在浏览器控制台中试用该行。只有当它在那里工作时,最好用脚本执行器运行它。我明白了。。。但问题是,当我使用
driver.execute_脚本('document.getElementsByClassName(“trumbowyg编辑器”)[0].value=arguments[0];','sending something to the text area')时,它不会再次保存。
当我更改为driver.execute_脚本('document.getElementsByClassName(“trumbowyg编辑器”)[0].innerHTML=arguments[0];',“向文本区域发送内容”)
然后它就被写入了。这是因为您执行的脚本并没有执行您希望它执行的操作。正如我在回答中所写的,如果它在控制台中的开发者工具中工作,那么它应该与脚本执行器一起工作。它应该是:“document.getElementsByClassName”(“trumbowyg编辑器“)[0].setAttribute(“值”,参数[0]);' 也编辑了答案。