Python中element is not attached to the page document问题

作为一个Python新手、经常会遇到一些别人遇到过的问题、然而这次遇到了这个问题、在网上看了许多答案依然没有解决我的问题、就先把代码贴出来、给自己留个课题、(已解决)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

b = webdriver.Chrome()

b.get("http://192.168.3.184/ecshop/admin/")
b.find_element_by_name("username").send_keys("admin")
b.find_element_by_name("password").send_keys("abcd1234")
b.find_element_by_class_name("btn-a").click()
b.switch_to.frame("header-frame")
b.find_element_by_xpath("//a[@href='users.php?act=list']").click()
b.switch_to.default_content()
b.switch_to.frame("main-frame")
num = b.find_element_by_id("totalRecords").text
b.find_element_by_id("pageSize").clear()
b.find_element_by_id("pageSize").send_keys(num)
b.find_element_by_id("pageSize").send_keys(Keys.ENTER)
print(num)
b.implicitly_wait(10)
count = 0
for i in range(int(num)):
    res = str(int(i) + 3)
    name = b.find_element_by_xpath("//tr[%s]/td[@class='first-cell']" % res).text
    if name == "胖虎!@#$%^&*":
        b.find_element_by_xpath("//tr[%s]/td[1]/input[@name='checkboxes[]']" % res).click()
        b.find_element_by_xpath("//input[@value='删除会员']").click()
        time.sleep(2)
        b.switch_to.alert().accept()
        # print(alert1.text)
        # alert1.accept()
        print("删除成功")
        count += 1
if count == 0:
    print("账户不存在")

-----------------------------------------------分割线-----------------------------------------------------------

虽然问题解决了、但结果并不像我现象中那样、参照了网上别人创建自定义异常的方法、一开始写自定义异常方法失败是因为Python版本问题、照搬别人的异常失败了、才觉得没用、

我用的是Python3.6、后来又找了找Python3.6的自定义异常修改方法、修改了一下然后成功了、

然而除了这个异常之外、上述代码中还有一个被我忽略了的bug、是29行的b.switch_to.alert().accept()、

这句代码中alert是不能加括号的、括号去掉之后、完美运行、

修改后的代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

def myExceptionFunctionForText(url):
    count = 0
    name = None
    while count < 3:
        try:
            name = b.find_element_by_xpath(url).text
            break
        except Exception:
            name = b.find_element_by_xpath(url).text
            if name != None:
                break
        count += 1
    if name == None:
        name = Exception
    return name

def myExceptionFunctionForClick(url):
    res = False
    count = 0
    while count < 3:
        try:
            b.find_element_by_xpath(url).click()
            res = True
            break
        except Exception:
            b.find_element_by_xpath(url).click()
        count += 1
    return res


b = webdriver.Chrome()

b.get("http://192.168.3.184/ecshop/admin/")
b.find_element_by_name("username").send_keys("admin")
b.find_element_by_name("password").send_keys("abcd1234")
b.find_element_by_class_name("btn-a").click()
b.switch_to.frame("header-frame")
b.find_element_by_xpath("//a[@href='users.php?act=list']").click()
b.switch_to.default_content()
b.switch_to.frame("main-frame")
num = b.find_element_by_id("totalRecords").text
b.find_element_by_id("pageSize").clear()
b.find_element_by_id("pageSize").send_keys(num)
b.find_element_by_id("pageSize").send_keys(Keys.ENTER)
# print(num)
b.implicitly_wait(10)
count = 0
inputName = input("请输入你要删除的用户名:")
for i in range(int(num)):
    res = str(int(i) + 3)
    textUrl = "//tr[%s]/td[@class='first-cell']" % res
    name = myExceptionFunctionForText(textUrl)
    # name = b.find_element_by_xpath("//tr[%s]/td[@class='first-cell']" % res).text
    if name == inputName:
        url = "//tr[%s]/td[1]/input[@name='checkboxes[]']" % res
        # b.find_element_by_xpath("//tr[%s]/td[1]/input[@name='checkboxes[]']" % res).click()
        if myExceptionFunctionForClick(url):
            pass
        b.find_element_by_xpath("//input[@value='删除会员']").click()
        b.switch_to.alert.accept()
        time.sleep(2)
        print("删除成功")
        count += 1
        break
if count == 0:
    print("账户不存在")

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值