python - 等待后没有得到解决的陈旧元素,python
问题描述
我正在尝试使用“课程”课程进入此页面上的每个链接
<a name="hrvatski-jezik" href="/pregled/predmet/29812177240/1971997880"><div class="course">
Hrvatski jezik <br>
<span class="course-info">Tamara Čer</span>
</div>
</a>
<a name="likovna-kultura" href="/pregled/predmet/29812176230/1971998890">
<div class="course">Likovna kultura <br>
<span class="course-info">Mia Marušić</span>
</div>
</a>
<a name="glazbena-kultura" href="/pregled/predmet/29812175220/1971999900">
<div class="course">Glazbena kultura <br>
<span class="course-info">Danijel Služek</span>
</div>
</a>
<a name="engleski-jezik" href="/pregled/predmet/29820696590/1972511970">
<div class="course">Engleski jezik <br>
<span class="course-info">Nevena Genčić</span>
</div>
</a>
<a name="matematika" href="/pregled/predmet/29812174210/1972000910">
<div class="course">Matematika <br>
<span class="course-info">Ivan Tomljanović</span>
</div></a>
<a name="biologija" href="/pregled/predmet/29812173200/1972001920">
<div class="course">Biologija <br>
<span class="course-info">Antonija Milić</span>
</div>
</a>
<a name="kemija" href="/pregled/predmet/29812172190/1972002930">
<div class="course">Kemija <br>
<span class="course-info">Antonija Milić</span>
</div>
</a>
<a name="fizika" href="/pregled/predmet/29812171180/1972003940">
<div class="course">Fizika <br>
<span class="course-info">Ivan Kunac</span>
</div>
</a>
<a name="povijest" href="/pregled/predmet/29812170170/1972004950">
<div class="course">Povijest <br>
<span class="course-info">Lovorka Krajnović Tot</span>
</div>
</a>
<a name="geografija" href="/pregled/predmet/29812169160/1972005960">
<div class="course">Geografija <br>
<span class="course-info">Sunčica Podolski <strong> (na zamjeni)</strong>, Oliver Timarac</span>
</div>
</a>
<a name="tehnicka-kultura" href="/pregled/predmet/29812168150/1972006970">
<div class="course">Tehnička kultura <br>
<span class="course-info">Ivan Dorotek</span>
</div>
</a>
<a name="tjelesna-i-zdravstvena-kultura" href="/pregled/predmet/29812167140/1972007980">
<div class="course">Tjelesna i zdravstvena kultura <br>
<span class="course-info">Davor Marković, Tomislav Ruskaj</span>
</div>
</a>
<a name="informatika" href="/pregled/predmet/29821462170/1972568530">
<div class="course">Informatika (izborni) <br>
<span class="course-info">Blaženka Knežević</span>
</div>
</a>
<a name="njemacki-jezik" href="/pregled/predmet/32658461270/1972646300"><div class="course">Njemački jezik (izborni) <br>
<span class="course-info">Zdravka Marković Boto</span>
</div>
</a>
<a name="rusinski-jezik-i-kultura" href="/pregled/predmet/32658491570/1972675590">
<div class="course">Rusinski jezik i kultura (izborni) <br>
<span class="course-info">Natalija Hnatko, Ilona Hrecešin</span>
</div>
</a>
<a name="sat-razrednika" href="/pregled/predmet/32322897860/2140793120">
<div class="course">Sat razrednika <br>
<span class="course-info">Blaženka Knežević</span>
</div>
</a>
<a name="izvannastavne-aktivnosti" href="/pregled/predmet/34285616720/2324344460">
<div class="course">Izvannastavne aktivnosti (izvannastavna aktivnost) <br>
<span class="course-info">Nevena Genčić, Ivan Kunac, Davor Marković, Josip Matezović, Antonija Milić, Tomislav Ruskaj, Danijel Služek</span>
</div>
</a>
` 我希望代码进入每个链接,然后返回并重复。它进入 try 块一次,然后进入 except 块 16 次。
对于每一个除了它给StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
我的代码:
def get_subject():
subjects = driver.find_elements_by_xpath("//div[@class='course']")
for subject in subjects:
actions = ActionChains(driver)
actions.move_to_element(subject)
try:
actions.click()
actions.perform()
driver.back()
print("try")
time.sleep(3)
except Exception as e:
subjects = driver.find_elements_by_xpath("//div[@class='course']")
print("except")
print(e)
我知道这是一个非常普遍的问题。我尝试了隐式和显式等待,我仍然得到同样的错误。我试过了visibility_of_element_located
,,,,我再次尝试定义“主题”。presence_of_element_located
staleness_of
非常感谢您的帮助,我一直在寻找解决方案一段时间。
解决方案
我建议all links
先捕获然后迭代。
alllinks=[link.get_attribute('href') for link in driver.find_elements_by_css_selector("a[href^='/pregled/predmet']")]
for link in alllinks:
driver.get(link)
#Perform your operation
如果您想继续使用您的代码,只需再次重新分配元素即可。因为您使用的是 driver.back(),所以您的页面正在刷新。
def get_subject():
subjects = driver.find_elements_by_xpath("//div[@class='course']")
for subject in range(len(subjects)):
subjects = driver.find_elements_by_xpath("//div[@class='course']")
actions = ActionChains(driver)
actions.move_to_element(subjects[subject])
try:
actions.click()
actions.perform()
driver.back()
print("try")
time.sleep(3)
except Exception as e:
subjects = driver.find_elements_by_xpath("//div[@class='course']")
print("except")
print(e)
推荐阅读
- c# - 从具有 ShowInTaskbar = false 的其他进程激活窗口
- java - 模拟一个服务返回一个空列表来测试 404 状态码
- azure - 在我的自托管 Windows 代理上安装 Azure-Cli 时出错
- swift - Swift - saveContext()、tableView、scrollView 和 reloadRows 问题?
- python - 如果我想使用 if elif 语句比较 3 个变量,我该怎么做?
- reactjs - Formik stepper props+步骤之间的钩子
- masstransit - 当 T 具有 IList 类型的属性时,Roslyn 分析器使 Visual Studio 崩溃
- matlab - MATLAB randn 数组中的定向伪影?
- mysql - 查询其中一张已转置的两张表
- reactjs - 有没有办法在 React 中读取 pdf 文件的内容