检查文本中的单词并打印()一次命令

问题描述 投票:1回答:2

使用这些命令我得到三个句子。

AnyText = driver.find_elements_by_xpath('AnyXpath')
    for AnyText1 in AnyText:
    print(AnyText1.text)

在控制台中,我得到类似的东西:

** 1)您好,我的名字是约翰

** 2)您好,我的名字是马克

** 3)您好,我的名字是Alex ..

如果单词在句子(元素)中,我怎么能检查所有三个句子都有单词“name”并打印(“OK”),如果没有,则打印(“ERROR”)。我试试:

    AnyText = driver.find_elements_by_xpath('AnyXpath')
    Text = 'name'
    if all(Text in AnyText1 for two in AnyText1):
        print('OK')
    else:
        print('ERROR')

但是这个方法只检查第一个元素(第一个句子)。我也试过这样的事

AnyText = driver.find_elements_by_xpath('AnyXpath')
Text = 'name'
for AnyText1 in AnyText:
    if all(Text in AnyText1):
        print('OK')
    else:
        print('ERROR')

但我得到很多次OK或ERROR

UPD:关于案文的问题,我在你的帮助下找到了答案。现在我想了解数字)

我有一个循环,可以或多或少地检查下一个数字。如果更多,写ERROR,如果更少,写入OK

sort_month=driver.find_element_by_xpath('/html/body/div[6]/div[2]/div/div[1]/div/div[13]/table/thead/tr/th[3]/a[4]').click()

month2=driver.find_element_by_xpath('//*[starts-with(@id, "td_")]/td[3]/span[3]')
month2=month2.text.replace("'", "").replace(" ", "")
buffer = 0
if int(month2) > buffer:
    print()
buffer = int(month2)
month1=driver.find_elements_by_xpath('//*[starts-with(@id, "td_")]/td[3]/span[3]')
for spisok_month in month1:
    spisok_month = spisok_month.text.replace("'", "").replace(" ", "")
    if int(spisok_month) > buffer:
        print('ERROR')
    elif int(spisok_month) < buffer:
        print('OK')
    else:
        print('==')
    buffer = int(spisok_month)

在这里,我也希望只看一次OK或ERROR。有任何想法吗?

python-3.x selenium selenium-webdriver
2个回答
2
投票

问题似乎是你的第一个代码片段中的简短循环形式。基本上它应该如下所示:

AnyText = driver.find_elements_by_xpath('AnyXpath')
Text = 'name'
if all(Text in AnyText1.text for AnyText1 in AnyText):
    print('OK')
else:
    print('ERROR')

更新:

在问题的更新部分,这是一个不同的实现,因为您必须在每次迭代中更新条件。为了便于阅读,保持扩展可能是有意义的:

outcome = 'OK'
for spisok_month in month1:
    spisok_month = spisok_month.text.replace("'", "").replace(" ", "")
    if int(spisok_month) > buffer:
        outcome = 'ERROR'
    elif outcome == 'OK' and int(spisok_month) == buffer:
        outcome = '=='
    buffer = int(spisok_month)
print(outcome)

注意:更新几乎是一个单独的问题。这意味着您的第一个问题不能代表实际问题,或者您应该在另一个帖子中提问


0
投票

在你的代码中,AnyText1是一个WebElement,而不是一个文本。您应该使用AnyText1.text来获取文本,然后它将工作:

AnyText = driver.find_elements_by_xpath('AnyXpath')
Text = 'name'

# AnyText1 is a WebElement and you should get text
if all(Text in AnyText1.text for AnyText1 in AnyText):
    print('OK')
else:
    print('ERROR')

请检查coding conventions以改进代码风格。

© www.soinside.com 2019 - 2024. All rights reserved.