selenium如何打开浏览器让用户选择dom树节点?
网友回复
注入一段js代码就能是实现:
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 # 打开chrome浏览器 driver = webdriver.Chrome() # 要在其中选择DOM元素的网页 url = "https://bfw.wiki" driver.get(url) #element = driver.find_element(By.XPATH,"/html/body/div/div[2]/div/div/h1") #old_html = element.get_attribute("innerHTML") #print(old_html) #element.send_keys("New Value") # 添加JavaScript代码来监听用户的点击事件,通过js函数获取用户点击的位置dom节点的xpath返回给python click_listener_script = """ function getElementXPath(element) { if (element && element.id) { return `id("${element.id}")`; } else { var paths = []; for (; element && element.nodeType === Node.ELEMENT_NODE; element = element.parentNode) { var index = 0; for (var sibling = element.previousSibling; sibling; sibling = sibling.previousSibling) { // 如果元素有相同的兄弟节点,则在路径中添加索引 if (sibling.nodeType === Node.ELEMENT_NODE && sibling.nodeName === element.nodeName) { index++; } } var tagName = element.nodeName.toLowerCase(); var pathIndex = index > 0 ? `[${index+1}]` : ''; paths.splice(0, 0, tagName + pathIndex); } return paths.length ? `/${paths.join('/')}` : null; } } // 示例使用 var element = document.getElementById('my-element'); var xpath = getElementXPath(element); console.log(xpath); document.addEventListener('click', function(event) { event.preventDefault(); let target_element = event.target; let xpath = getElementXPath(target_element); target_element.style.border = '2px solid red'; var newDiv = document.createElement("div"); newDiv.setAttribute("id", "my-id"); newDiv.setAttribute("info", xpath); document.body.appendChild(newDiv); // window.clicked_element_id = target_element.id; }); """ driver.execute_script(click_listener_script) # 等待用户点击一个元素 clicked_element_info = WebDriverWait(driver, 120).until( EC.presence_of_element_located((By.ID, "my-id")) #EC.presence_of_element_located((By.XPATH, "//*[@id]")) ).get_attribute("info") print(f"Clicked element ID: {clicked_element_info}") # 关闭浏览器 driver.quit()