这个错误是因为在迭代字典时,对字典进行了修改。在这段代码中,你尝试在循环中修改字典banshi1和banshi。这会导致迭代时字典大小发生变化,引发RuntimeError。

为了解决这个问题,你可以创建一个副本字典,在副本字典上进行修改,然后再将修改后的值赋给原始字典。

在你的代码中,你已经创建了副本字典banshi1,但是在修改时,你直接将修改后的值赋给了原始字典banshi。这会导致字典banshi的大小发生变化。

要解决这个问题,你可以使用深拷贝方法来创建副本字典,这样可以确保在修改副本字典时不会影响原始字典。可以使用copy模块中的deepcopy方法来实现深拷贝。

修改代码如下:

import copy

banshi = banshi()
banshi1 = copy.deepcopy(banshi) # 使用深拷贝创建副本字典
hrefs = []
for k, v in banshi1.items():
    for i, j in v.items():
        lists = []
        for z in j:
            driver = webdriver.Chrome()
            driver.get(z)
            sleep(3)
            try:
                alert = driver.switch_to.alert
                alert.accept()
            except NoAlertPresentException:
                pass
            try:
                driver.find_element(By.XPATH, '/html/body/div/div[2]/div[2]/div[1]/div[2]/div/ul/li[5]').click()
                ul = driver.find_element(By.XPATH, '/html/body/div/div[2]/div[2]/div[1]/div[1]')
                li_list = ul.find_elements(By.TAG_NAME, 'a')
                for i in li_list:
                    lists.append(i.get_attribute("href"))
                    print(i.get_attribute("href"))
                driver.quit()
                v[i] = lists  # 修改副本中的值
            except:
                pass
        banshi[k][i] = v[i]  # 将副本中修改后的值赋给原字典
print(banshi)

这样修改后,你应该能够避免"dictionary changed size during iteration"错误

banshi = banshi banshi1 = banshicopy hrefs = for k v in banshi1items for i j in vitems lists = for z in j driver = we

原文地址: https://www.cveoy.top/t/topic/iL4n 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录