如何防止过时的元素引用并使 WebElement 在 selenium 中自我更新?

我是一个处理 python 和 selenium 的新手,一周前才开始,所以请原谅我乱七八糟的代码。我试图从该网站中带有标签名称的元素中提取所有“structure_id”和“d”信息,并将它们存储在单独的 svg 文件中。这是我遇到问题的代码片段:


for number in range(1,106):

    try:

        element = WebDriverWait(driver, 10).until(

            EC.presence_of_all_elements_located((By.ID, 'master_group'))

        )

        selected = driver.find_element_by_class_name('simstripImgSel')


        driver.get(driver.current_url)

        paths = driver.find_elements_by_tag_name('path')

        

        for path in paths:

            while True:

                try:

                    structure = path.get_attribute('structure_id')

                    d = path.get_attribute('d')

                    break

                except Exception as e:

                    print(e)

                    paths = driver.find_elements_by_tag_name('path')

                    continue

            if structure != None:

                print('Attributes copied.')

                for word, initial in data.items():

                    structure = structure.replace(word,initial)

                filepath = Path('C:\\Users\\justs\\Downloads\\Ordered_svgs\\slice'+str(number)+'\\'+str(structure)+'.svg')

                if filepath.is_file():

                    text = open('C:\\Users\\justs\\Downloads\\Ordered_svgs\\slice'+str(number)+'\\'+str(structure)+'.svg','r+')

                    rep = text.read()

                    rep = rep.replace('</svg>','<path id="')

                    text.close()

这对于第一页效果很好,但我需要提取所有 106 页的路径,并且在按一次“F”后(移动到下一页),我在 行 处获得了陈旧的元素引用structure = path.get_attribute('structure_id')。最初,我认为路径需要一些时间来加载,因此需要 while 循环,但到了第二页,它就陷入了永无休止的陈旧元素引用。


显式等待或刷新页面也不起作用,我怀疑 WebElementdriver.find_element_by_class_name根本没有更新(当我进入下一页后刷新页面时,我提取的文件最终与第一页相同,无论如何,我在第 5 页得到了陈旧的元素引用)。我该如何解决这个问题?任何帮助表示赞赏!


慕后森
浏览 138回答 1
1回答

莫回无

您循环了该 url,因此它转到了第 1 页。driver.get('http://atlas.brain-map.org/atlas?atlas=265297126#atlas=265297126&plate=102339919&structure=10155&x=42480&y=16378&zoom=-7&resolution=124.49&z=2')for i in range(1,106):&nbsp; &nbsp; try:&nbsp; &nbsp; &nbsp; &nbsp; paths=WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located((By.TAG_NAME, "path")))&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for path in paths:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; structure = path.get_attribute('structure_id')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; d = path.get_attribute('d')&nbsp; &nbsp; &nbsp; &nbsp; WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "simstripImgSel"))).send_keys("F")&nbsp; &nbsp; &nbsp; &nbsp; time.sleep(0.5)&nbsp; &nbsp; except Exception as e:&nbsp; &nbsp; &nbsp; &nbsp; print(e)进口from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWait&nbsp;from selenium.webdriver.support import expected_conditions as EC
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python