Не удается прочитать innerHTML неопределенного в селене мысли элемент определен? - PullRequest
0 голосов
/ 28 октября 2018

Во время выполнения скрипта Python, использующего Selenium и Chrome-driver, возникла особая проблема, когда драйвер выполняет сегмент скрипта Java, а затем возвращает:

Message: unknown error: Cannot read property 'innerHTML' of undefined

Это сегмент:

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()""");

Сценарий java работает без ошибок при выполнении в командной строке google chrome, без оператора недопустимого возврата. Обновление chromedriver и selenium, похоже, не решает проблему.

1 Ответ

0 голосов
/ 28 октября 2018

Попробуйте подождать, пока в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...