消息:过时的元素引用:元素未附加到页面文档 - Web Table Python
Message: stale element reference: element is not attached to the page document - Web Table Python
enter image description hereenter image description here我在尝试使用 selenium Python 自动化 Web-table 时遇到上述异常。下面是我的代码
import time
from selenium import webdriver
from selenium.common.exceptions import StaleElementReferenceException
driver = webdriver.Chrome("E:\pythonProject\Framefork1\BrowserDrivers\chromedriver.exe")
driver.maximize_window()
driver.get("https://admin-demo.nopcommerce.com/Admin/Customer/List")
driver.find_element_by_xpath("/html/body/div[6]/div/div/div/div/div[2]/div[1]/div/form/div[3]/input").click()
time.sleep(5)
table = driver.find_element_by_xpath("(//table[@class='table table-bordered table-hover table-striped dataTable no-footer'])[2]")
body = table.find_element_by_tag_name("tbody")
cells = body.find_elements_by_tag_name("td")
rows = body.find_elements_by_tag_name("tr")
links = driver.find_elements_by_xpath("//i[@class='fa fa-pencil']")
print(len(rows))
for i in range(len(rows)):
col = rows[i].find_elements_by_tag_name("td")
for j in range(len(col)):`enter code here`
if col[j].text == "Registered":
time.sleep(5)
links[i].click()
driver.find_element_by_link`_text("back to customer list").click()
业务场景我附上文档供参考
selenium
不会为您提供 python 的元素,而是对网络浏览器中当前页面上对象的引用。当您单击并加载新页面时,您将失去对这些对象的访问权。
首先,您必须将所有链接获取为文本,然后将它们与 driver.get()
一起使用
import time
from selenium import webdriver
from selenium.common.exceptions import StaleElementReferenceException
driver = webdriver.Chrome()#"E:\pythonProject\Framefork1\BrowserDrivers\chromedriver.exe")
driver.maximize_window()
driver.get("https://admin-demo.nopcommerce.com/Admin/Customer/List")
driver.find_element_by_xpath("//input[@type='submit']").click()
time.sleep(5)
table = driver.find_element_by_xpath("(//table[@class='table table-bordered table-hover table-striped dataTable no-footer'])[2]")
body = table.find_element_by_tag_name("tbody")
cells = body.find_elements_by_tag_name("td")
rows = body.find_elements_by_tag_name("tr")
#links = driver.find_elements_by_xpath("//i[@class='fa fa-pencil']")
links = driver.find_elements_by_xpath("//a[@class='btn btn-default']")
print(len(rows))
# -- first get all links ---
links_to_click = []
for i in range(len(rows)):
col = rows[i].find_elements_by_tag_name("td")
for j in range(len(col)):
if col[j].text == "Registered":
links_to_click.append(links[i].get_attribute('href'))
print(links_to_click)
# --- next visit all links ---
for link in links_to_click:
driver.get(link)
#driver.find_element_by_link_text("back to customer list").click()
enter image description hereenter image description here我在尝试使用 selenium Python 自动化 Web-table 时遇到上述异常。下面是我的代码
import time
from selenium import webdriver
from selenium.common.exceptions import StaleElementReferenceException
driver = webdriver.Chrome("E:\pythonProject\Framefork1\BrowserDrivers\chromedriver.exe")
driver.maximize_window()
driver.get("https://admin-demo.nopcommerce.com/Admin/Customer/List")
driver.find_element_by_xpath("/html/body/div[6]/div/div/div/div/div[2]/div[1]/div/form/div[3]/input").click()
time.sleep(5)
table = driver.find_element_by_xpath("(//table[@class='table table-bordered table-hover table-striped dataTable no-footer'])[2]")
body = table.find_element_by_tag_name("tbody")
cells = body.find_elements_by_tag_name("td")
rows = body.find_elements_by_tag_name("tr")
links = driver.find_elements_by_xpath("//i[@class='fa fa-pencil']")
print(len(rows))
for i in range(len(rows)):
col = rows[i].find_elements_by_tag_name("td")
for j in range(len(col)):`enter code here`
if col[j].text == "Registered":
time.sleep(5)
links[i].click()
driver.find_element_by_link`_text("back to customer list").click()
业务场景我附上文档供参考
selenium
不会为您提供 python 的元素,而是对网络浏览器中当前页面上对象的引用。当您单击并加载新页面时,您将失去对这些对象的访问权。
首先,您必须将所有链接获取为文本,然后将它们与 driver.get()
import time
from selenium import webdriver
from selenium.common.exceptions import StaleElementReferenceException
driver = webdriver.Chrome()#"E:\pythonProject\Framefork1\BrowserDrivers\chromedriver.exe")
driver.maximize_window()
driver.get("https://admin-demo.nopcommerce.com/Admin/Customer/List")
driver.find_element_by_xpath("//input[@type='submit']").click()
time.sleep(5)
table = driver.find_element_by_xpath("(//table[@class='table table-bordered table-hover table-striped dataTable no-footer'])[2]")
body = table.find_element_by_tag_name("tbody")
cells = body.find_elements_by_tag_name("td")
rows = body.find_elements_by_tag_name("tr")
#links = driver.find_elements_by_xpath("//i[@class='fa fa-pencil']")
links = driver.find_elements_by_xpath("//a[@class='btn btn-default']")
print(len(rows))
# -- first get all links ---
links_to_click = []
for i in range(len(rows)):
col = rows[i].find_elements_by_tag_name("td")
for j in range(len(col)):
if col[j].text == "Registered":
links_to_click.append(links[i].get_attribute('href'))
print(links_to_click)
# --- next visit all links ---
for link in links_to_click:
driver.get(link)
#driver.find_element_by_link_text("back to customer list").click()