如何迭代selenium中的元素

时间:2018-04-30 17:09:06

标签: selenium-webdriver

其实我想在“outlook:live”的垃圾文件夹中逐一阅读电子邮件,并标记电子邮件“不垃圾邮件”。emails selected with xpath

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()

请帮我知道我哪里做错了。提前致谢

1 个答案:

答案 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列表)。