一尘不染

通过execute_script创建元素时无法找到find_element_by_id

selenium

我目前正在使用python 3.6.5,selenium版本3.14.0

如果我创建了如下所示的网络元素:

driver.execute_script("""var body = document.getElementsByTagName('body').item(0);var div = document.createElement('div');div.setAttribute('id', 'ZZZ');body.appendChild(div);""")

我无法使用以下内容:

    wait.until(
        expected_conditions.presence_of_element_located(
            (By.ID, 'ZZZ')
        )
    )

我已经仔细检查过是否成功创建了该元素,但是使用selenium包提供的API(例如find_element_by_id和上面的脚本)无法找到该元素。

问题:在execute_script之后注入新元素之后,我还需要做其他事情吗?还是目前,这不可能吗?

我可以通过以下方式获取元素:

new_element = driver.execute_script('return document.getElementById("ZZZ");')

但是,如果我不能使用selenium包提供的默认API(例如find_element_by_id),这对我来说将很困难


阅读 390

收藏
2020-06-26

共1个答案

一尘不染

下面的代码对我有用:

driver.get('http://www.google.com')
elem = driver.find_element_by_name("q")
driver.execute_script("var body = document.getElementsByTagName('body').item(0);var div = document.createElement('div');div.setAttribute('id', 'ZZZ');body.appendChild(div);")

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "ZZZ"))
)
driver.quit()
2020-06-26