javascript - 无法读取 selenium 中未定义的 innerHTML 认为元素已定义?

标签 javascript html python-3.x selenium selenium-chromedriver

在使用 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/

相关文章:

html - '溢出-x : scroll' inside a fixed div prevents vertical scrolling on ios

html - 在显示表行时更改隐藏表行中表数据的样式

有趣的是,libtidy 抛出的 Python 异常无法捕获

php - 这段代码是什么意思 : `$Odd = ($Odd == "even") ? "odd": "even";` ?

python - 如何在连续的 matplotlib 图形之间添加空格?

python - 无法将数据帧转换为 CSV

javascript - 使用另一个输入值设置 jQuery 值

javascript - IE 在 JavaScript 运行某些操作时停止工作

javascript - 如何仅添加 5 个动态文本框以及如何仅在日期选择器中显示当前星期

javascript - 如果 n 等于 2,那么为什么 n *= 3 + 5 结果不等于 n = n * 3 + 5