0

在此处输入图像描述 在此处输入图像描述我在尝试使用 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()

对于业务场景,我附上了一个文档以供参考

4

1 回答 1

0

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()
于 2021-02-06T04:43:48.770 回答