这个错误是由于在循环遍历字典banshi1的同时,又对字典banshi进行修改导致的。在Python中,不允许在循环遍历字典的过程中修改字典的大小。

解决这个问题的方法是创建一个副本来遍历字典,然后在副本上进行修改。你已经使用了banshi1=banshi.copy()来创建了一个副本,但是在修改banshi的时候,你没有使用副本。

修改代码如下:

banshi = banshi()
banshi1 = banshi.copy()
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)

这样就可以避免在循环遍历字典的同时修改字典的问题。

Python字典迭代修改导致RuntimeError: dictionary changed size during iteration错误解决方案

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

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