r_D*_*r_D 5 javascript selenium selenium-webdriver
我使用这个建议执行JavaScript ,我想从这个脚本返回一个值.
Joc*_*hen 16
您可以像这样返回值:
Java的:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
driver.execute_script("return document.title")
Run Code Online (Sandbox Code Playgroud)
如果您要执行的 Javascript 是同步的,那么 javascript 返回值将被分配给方法 \xe2\x80\x94 的结果driver.execute_script()
,这可能是您所期望的,并遵循最不令人意外的原则:
from selenium import webdriver\n\ndriver = webdriver.Chrome()\n\n# make sure you have a `return` in the js code\njs_url = driver.execute_script("return window.location.href")\nprint(js_url)\n
Run Code Online (Sandbox Code Playgroud)\n对于异步调用,请使用driver.execute_async_script
:
from selenium import webdriver\n\ndriver = webdriver.Chrome()\n\nprint(driver.execute_async_script(\'\'\'\n fetch(\'http://httpbin.org/get\')\n .then(resp=>resp.json())\n .then(data=>{alert(JSON.stringify(data)\n )});\n\'\'\'))\n
Run Code Online (Sandbox Code Playgroud)\n对于jQuery.ajax()的具体情况,您还可以通过传递强制调用同步async: false
(默认情况下是异步的),例如以下代码将同步返回 http 响应文本:
from selenium import webdriver\n\ndriver = webdriver.Chrome()\n\nhttp_response = driver.execute_script("""\nreturn $.ajax({\n url: \'http://httpbin.org/get\', \n async: false\n}).responseText""")\n\nprint(http_response)\n
Run Code Online (Sandbox Code Playgroud)\n
我使用(在.js文件中)附加要返回的值:
document.body.innerHTML += '<div style="display:none;" id="some_id">' + value_to_be_returned + '</div>';
Run Code Online (Sandbox Code Playgroud)
并使用(在.java文件中)访问java中的值:
String return_value = (String) js.executeScript("return document.getElementById('some_id').innerHTML");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21827 次 |
最近记录: |