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