问题描述
我正在尝试使用Javascript在页面上获取表主体元素,如果我能尽快运行它,则无法定义,但是如果我等待几秒钟,它将起作用。
def get_row_list(browser):
table_body = browser.execute_script("""
var tbody = document.getElementsByClassName("sortable")[0].children[1]
return tbody
""")
while table_body == None:
browser.execute_script("""
var tbody = document.getElementsByClassName("sortable")[0].children[1]
return tbody
""")
return table_body.find_elements_by_tag_name("tr")
如果我运行得太早,我会收到Message: TypeError: document.getElementsByClassName(...)[0] is undefined
1楼
我不知道这在使用Python中的JS时是否有效,但这肯定仅在执行JS时有用。
尝试:
table_body = browser.execute_script("""
document.onload = function() {
document.getElementsByClassName("sortable")[0].children[1];
return tbody;
}
""")
这应该等到您的DOM被加载,然后寻找所需的元素
2楼
sortable
元素尚未呈现...
Ues 等待元素加载:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CLASS_NAME, "sortable"))
希望这对您有所帮助!
3楼
为了弄清为什么它不起作用,这里的关键部分是您为时过早的错误。
基本上,文档尚未加载。 这意味着您的DOM(文档对象模型)表示形式尚未准备好进行解析。
本质上,您的代码将要运行的是浏览器在等待文档加载之前正在执行脚本。 为了解决这个问题,在DOM准备就绪时发出一个信号。