首页 > 解决方案 > 遍历页面上的按钮/图块时出现 StaleElementReferenceException

问题描述

我正在网页抓取https://www.bell.ca/Mobility/Smartphones_and_mobile_internet_devices并且当一个人选择一部手机并继续选择一个计划作为“新客户”时,通常有两个或三个按钮:“premium ultra”、“premium plus” ',等等。我已经获得了这些图块的 css 选择器,但是当我进入第三次迭代时,我得到了一个'StaleElementReferenceException'。

我已经设置了尝试/异常,但是我更愿意通过所有的瓷砖,因为我的代码的下一部分涉及遍历下面的“计划和数据选项”。

        plantypes = driver.find_elements_by_css_selector('#prod-term-radio .hot-tile')

        print(len(plantypes)) #number of plan types.

        for plan in plantypes:
            try:

                plan.click()
                time.sleep(3)


            except exceptions.StaleElementReferenceException as e:
                pass

我希望能够遍历所有图块,而不是在第二个图块之后过早地切掉。

标签: pythonseleniumweb-scraping

解决方案


单击后您必须刷新元素列表,因为DOM已更新,导致元素过时,试试这个;

plantypes = driver.find_elements_by_css_selector('#prod-term-radio .hot-tile')        
print(len(plantypes)) #number of plan types.

for count, plan in enumerate(plantypes):
    try:
        ptypes = driver.find_elements_by_css_selector('#prod-term-radio .hot-tile') 
        ptypes[count].click()
        time.sleep(3)

    except exceptions.StaleElementReferenceException as e:
        pass

推荐阅读