2017-01-03 153 views
0

说,例如,我有一个关键字这个名单:“头,脚,手,手指” 我如何通过所有这些内部“()browser.find_element_by_link_text()的? 目的是逐个搜索所有这些关键字,如果找到,将模拟点击每个关键字。我可以在selenium中的browser.find_element_by_link_text()中传递变量吗?

示例代码:

for i in browser.find_element_by_link_text("**all keywords should be passed here**"): 
     i.click() 

PS。 Python新手。

回答

2

您无法将多个链接文本传递给find_element_by_link_text()

您有多种方法可以解决问题。你可以,例如,切换到使用XPath定位 - 动态地构建一个表达检查所有的链接文本的变化:

link_texts = ["Head", "Feet", "Hand", "Fingers"] 
expression = "//a[%s]" % (" or ".join(". = '%s'" % link_text for link_text in link_texts)) 

for link in driver.find_elements_by_xpath(expression): 
    link.click() 

或者,你可以在一个循环处理NoSuchElementException exception发出find_element_by_link_text()(如果一个元素不发现)正确:

from selenium.common.exceptions import NoSuchElementException 

link_texts = ["Head", "Feet", "Hand", "Fingers"] 
for link_text in link_texts: 
    try: 
     link = driver.find_element_by_link_text(link_text) 
     link.click() 
    except NoSuchElementException: 
     print("Link text '%s' not found" % link_text) 

后一种选择会比较慢,但是在同一时间更加明确。

+0

第二个建议结果为“NameError:name'NoSuchElementException'未定义”...我明天想到第一个,我不能让它工作..谢谢队友 –

+0

@CuriousCat是的,你需要导入它,添加到答案。希望有所帮助。 – alecxe

+0

第二部作品,谢谢alecxe,第一部完全没有做过.. –

相关问题