Geo*_*Geo 7 python selenium webdriver
我想允许用户输入并根据它做出一些决定.如果我这样做:
driver.execute_script("prompt('Enter smth','smth')")
Run Code Online (Sandbox Code Playgroud)
我得到了一个很好的提示,但我无法使用它的价值.有没有办法向用户显示输入框,并使用在那里输入的值?
编辑:这是我的脚本:
来自selenium.webdriver导入Firefox
from selenium.webdriver import Firefox
if __name__ == "__main__":
driver = Firefox()
driver.execute_script("window.promptResponse=prompt('Enter smth','smth')")
a = driver.execute_script("var win = this.browserbot.getUserWindow(); return win.promptResponse")
print "got back %s" % a
Run Code Online (Sandbox Code Playgroud)
这退出时有以下例外:
a = driver.execute_script("var win = this.browserbot.getUserWindow(); return win.promptResponse")
File "c:\python26\lib\site-packages\selenium-2.12.1-py2.6.egg\selenium\webdriver\remote\webdriver.py", line 385, in ex
ecute_script
{'script': script, 'args':converted_args})['value']
File "c:\python26\lib\site-packages\selenium-2.12.1-py2.6.egg\selenium\webdriver\remote\webdriver.py", line 153, in ex
ecute
self.error_handler.check_response(response)
File "c:\python26\lib\site-packages\selenium-2.12.1-py2.6.egg\selenium\webdriver\remote\errorhandler.py", line 110, in
check_response
if 'message' in value:
TypeError: argument of type 'NoneType' is not iterable
Run Code Online (Sandbox Code Playgroud)
我做得不对劲?
编辑:我试着像prestomanifesto建议做,这是输出:
In [1]: from selenium.webdriver import Firefox
In [2]: f = Firefox()
In [3]: a = f.ex
f.execute f.execute_async_script f.execute_script
In [3]: a = f.execute_script("return prompt('Enter smth','smth')")
In [4]: a
Out[4]: {u'text': u'Enter smth'}
In [5]: a
Out[5]: {u'text': u'Enter smth'}
In [6]: class(a)
File "<ipython-input-6-2d2ff4f61612>", line 1
class(a)
^
SyntaxError: invalid syntax
In [7]: type(a)
Out[7]: dict
Run Code Online (Sandbox Code Playgroud)
希望这对其他人有帮助:
# selenium (3.4.1) python (3.5.1)
driver.execute_script("var a = prompt('Enter Luffy', 'Luffy');document.body.setAttribute('data-id', a)")
time.sleep(3) # must
print(self.driver.find_element_by_tag_name('body').get_attribute('data-id')) # get the text
Run Code Online (Sandbox Code Playgroud)
您在javascript中使用提示框是正确的。但提示框的值应该分配给一个全局变量,然后您可以在以后使用该变量。像这样的东西:
driver.execute_script("window.promptResponse=prompt('Enter smth','smth')")
然后从同一个全局变量中检索值。
a = driver.execute_script("var win = this.browserbot.getUserWindow(); return win.promptResponse")
Run Code Online (Sandbox Code Playgroud)
你可能需要投射回报。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
8441 次 |
| 最近记录: |