selenium.common.exceptions.StaleElementReferenceExceptionエラーの原因

7971 ワード

なぜなら、2つ目をクリックするとすでに新しいページで、前のページの要素が見つからないからです.
 
エラーコードセグメント
elem_pic = driver.find_elements_by_xpath("//div[@class='imgpage']/ul/li/div/a/img")
for i in elem_pic:
    elem_url = i.get_attribute("src")
    driver.get(elem_url)
    urlretrieve(elem_url,"m"+str(c)+".jpg")

エラー:
selenium.common.exceptions.StaleElementReferenceException: Message: {"errorMessage":"Element does not exist in cache","request":{"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:50811","User-Agent":"Python http auth"},"httpVersion":"1.1","method":"GET","url":"/attribute/src","urlParsed":{"anchor":"","query":"","file":"src","directory":"/attribute/","path":"/attribute/src","relative":"/attribute/src","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/attribute/src","queryKey":{},"chunks":["attribute","src"]},"urlOriginal":"/session/e23a6270-ad9c-11e7-9d81-eb604b74f70b/element/:wdc:1507627515312/attribute/src"}}

 
ページをリフレッシュしてから要素を再取得すればいいので、事前に要素のセットを取得しないで、各要素をループ操作します.この場合は要素の個数を取得し、ループで対応する位置の要素を取得し、使用するときに取得します.
ページに変化がある場合は、要素をループしないで、個数をループしたり、位置決めしたりして、ループの中で要素を取得します.
転載先:https://www.cnblogs.com/AbsolutelyPerfect/p/7647158.html