其实我想在“outlook:live”的垃圾文件夹中逐一阅读电子邮件,并标记电子邮件“不垃圾邮件”。
emails = WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,“// div [@class ='xoCOIP8PzdTVy0T6q_uG6']”)))
此xpath匹配400个实例。我想循环选择一个电子邮件,例如选择第一封电子邮件,点击div并执行操作,然后选择第二封电子邮件,依此类推。我正在尝试这个
emails = WebDriverWait(driver,
5).until(EC.element_to_be_clickable((By.XPATH,"//div[@class =
'xoCOIP8PzdTVy0T6q_uG6']")))
for count in range(0,len(emails)):
(emails)[count+1].click()
请帮我知道我哪里做错了。提前致谢
答案 0 :(得分:0)
您用来返回可点击元素的功能似乎只返回一个元素,因此您必须使用不同的功能,对逻辑进行更改等。
例如,你可以使用Selenium的find_elements_by_xpath("//div[@class = 'xoCOIP8PzdTVy0T6q_uG6']")
,如果找到了元素,它将返回一个WebElement对象列表,如果元素是,则返回一个空列表未找到。当然,这不会考虑元素未被完全加载到页面上的可能性。根据我的经验,打开页面后打一个time.sleep(10)
就足够了#34;。
我建议您确保首先发现您的元素并与其进行互动,以确保这些元素都没有白费,如果您还没有。
另一种选择是在预期条件源代码中添加另一个函数,例如elements_to_be_clickable()
函数。
从预期条件documentation开始,我做了一些研究,看起来element_to_be_clickable()
函数只返回一个元素。而且,从source code开始,所述函数主要利用visibility_of_element_located()
函数。我相信您可以遵循与element_to_be_clickable()
函数类似的逻辑,而是使用visibility_of_all_elements_located()
函数,以便返回多个Web元素(因为visibiilty_of_all_elements_located()
返回WebElements列表)。