Python运行循环,直到在list元素中找到关键字

Python运行循环,直到在list元素中找到关键字,python,python-3.x,loops,selenium,if-statement,Python,Python 3.x,Loops,Selenium,If Statement,我有一个元素列表,它们像这样返回 <selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807512")> <selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae

我有一个元素列表,它们像这样返回

<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807512")>
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807513")>
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807514")>
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807515")>
print(comment.text)
在元素中有文本,我可以看到这样的文本

<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807512")>
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807513")>
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807514")>
<selenium.webdriver.remote.webelement.WebElement (session="d3cf9b70-cdc1-11e7-8b3e-570f82e3aaae", element=":wdc:1511161807515")>
print(comment.text)
在元素列表中找到关键字之前,如何运行循环

例如,关键字可以是“LakerKobe”。如果它找到带有我设置的关键字文本的元素,我希望循环停止运行

这就是我认为有效的方法

for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):
    if 'LakerKobe' in comment.text:
        print('found')
然而,这种方法是不可靠的。它有效&有时无效。例如,如果您运行此

keywordMain = 'if you shoot heroin 90% chance your dead already. herion is a different beast'

if 'heroin' in keywordMain:
        print('found')

你会看到什么都没有返回。当您通过以下方式收集
WebElements时,我正在使用python 3.6

for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):
当一个
WebElements
包含字符串
LakerKobe
时,要打印
Search Found
,可以使用以下代码块:

for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):
    if ("LakerKobe" in comment.get_attribute('innerHTML')):
        print("Search Found")
更新: 作为替代方案,您也可以尝试此选项:

for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):
    if comment.get_attribute('innerHTML').__contains__('LakerKobe'):
        print("Search Found")
这两个词(“海洛因”在
循环中)和“海洛因”在
关键字main
中似乎是相等的,但它们不是。试一试

[ord(i) for i in "heroin"]
对于这两个词,您将得到

[104, 101, 114, 111, 105, 110]

适当地。您在
for
循环中使用的单词中几乎没有额外的ASCII字符


所以这与硒无关。只需使用准确的关键字

尝试打印

print 'heroin'.__repr__()  #copy exactly from if condition 
print keywordMain[3].__repr__()

#you will see extra characters which is hidden but makes string different.
'heroin\xef\xbb\xbf'
'heroin'
你可以用这个简单的方法摆脱这个角色

def删除非asciis:

return“。join(filter)(lambda x:ord(x)我仍然需要帮助你能用我的答案更新状态吗?你是否看到任何错误或与预期结果的任何偏差?在“海洛因”中我的ord(I)到底会去哪里?
去哪里?它在做什么?它只是将字符串转换成ASCII码。你只需做
“海洛因”==“海洛因”
看看这些不同的词不是我想要的答案……我不是在看innerHTML,它们都是句子element@FutureHendrixs你是否至少试过一次代码,尽管听起来可能与你的理解不同?是的,兄弟。你还有其他的吗ways@FutureHendrixs您在实际r中观察到了什么偏差与预期结果有关的结果?
def remove_non_asciis(s):
    return "".join(filter(lambda x: ord(x)<128, s))