banshi = banshi banshi1 = banshicopy hrefs = for k v in banshi1items for i j in vitems lists = for z in j driver = we
这个错误是因为在迭代字典时,对字典进行了修改。在这段代码中,你尝试在循环中修改字典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"错误
原文地址: https://www.cveoy.top/t/topic/iL4n 著作权归作者所有。请勿转载和采集!