如何解决消息:过时的元素参考:元素未附加到页面文档 - Web Table Python
enter image description hereenter image description here我在尝试使用 selenium Python 自动化 Web 表时遇到上述异常。下面是我的代码
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 的元素,而是对 Web 浏览器中当前页面上的对象的引用。当您单击并加载新页面时,您将无法访问这些对象。
首先您必须以文本形式获取所有链接,然后将它们与 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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。