我当前正在使用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)
,这对我来说将很困难答案 0 :(得分:2)
以下代码对我有用:
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()
答案 1 :(得分:2)
@KireetiAnnamaraj的回答很完美。此外,如果您想验证添加的元素是否在 HTML 中,可以使用以下解决方案print()
outerHTML
>
代码块:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument('disable-infobars')
driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
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")))
print(element.get_attribute("outerHTML"))
driver.quit()
控制台输出:
<div id="ZZZ"></div>