在使用 Selenium 和 Chrome 驱动程序执行 python 脚本期间,驱动程序执行 java 脚本段然后返回的位置存在一个特殊问题:
消息:未知错误:无法读取未定义的属性“innerHTML”
这是片段:
function getCommand() {
var MSGNUM = document.getElementsByClassName("ChatBox").length -1;
var MSG = document.getElementsByClassName("message-body")[MSGNUM];
MSG = MSG.innerHTML;
var NAME = document.getElementsByClassName("username")[MSGNUM];
NAME = NAME.innerHTML;
var COMMAND = (NAME+" "+MSG);
return(COMMAND);
}
return getCommand(); //To return the statement back to a python varible
<div class="ChatBox" style="display: block;">
<div class="Wrapper">
<div class="username">Chuck Norris</div>
<div class="message-body">Goodmorning</div>
</div>
</div>
以及执行它的 python 代码
message = driver.execute_script(""" function getCommand() {
var MSGNUM = document.getElementsByClassName("ChatBox").length -1;
var MSG = document.getElementsByClassName("message-body")[MSGNUM];
MSG = MSG.innerHTML;
var NAME = document.getElementsByClassName("username")[MSGNUM];
NAME = NAME.innerHTML;
var COMMAND = (NAME+" "+MSG);
return(COMMAND);
}
returngetCommand()""");
在 google chrome 命令行中执行时,java 脚本可以正常工作,没有非法的 return 语句。更新 chromedriver 和 selenium 似乎无法解决问题。
最佳答案
尝试等待一段时间,直到所需元素出现在 DOM 中。此外,我认为没有理由使用 execute_script
:
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.by import By
chat_box = wait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "ChatBox")))[-1]
message = chat_box.find_element_by_class_name("message-body").text
name = chat_box.find_element_by_class_name("username").text
print(name + " " + message)
关于javascript - 无法读取 selenium 中未定义的 innerHTML 认为元素已定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53028375/