Python运行循环,直到在列表selenium元素

时间:2017-11-20 07:56:33

标签: 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", 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")>

我如何收集它们

for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):

在元素内部有文字,我可以看到像这样的文本

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

你将看不到任何回复。我使用的是python 3.6

3 个答案:

答案 0 :(得分:0)

在收集WebElements时:

for comment in driver.find_elements_by_xpath("//*[contains(text(), '')]"):

要在其中一个Search Found包含字符串WebElements时打印LakerKobe,您可以使用以下代码块:

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

答案 1 :(得分:0)

这两个词(for循环中的“海洛因”和keywordMain中的“海洛因”)似乎相等,但事实并非如此。试试

[ord(i) for i in "heroin"]

两个单词,你会得到

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

[104, 101, 114, 111, 105, 110, 239, 187, 191]

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

所以这不是关于Selenium。只需使用完全关键字

即可

答案 2 :(得分:0)

尝试打印

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 remove_non_asciis(s):
    return "".join(filter(lambda x: ord(x)<128, s))