检查列表是不是包含特定字符串,问题[关闭]

Posted

技术标签:

【中文标题】检查列表是不是包含特定字符串,问题[关闭]【英文标题】:Check if List Contains Specific String, Problem [closed]检查列表是否包含特定字符串,问题[关闭] 【发布时间】:2019-01-04 15:13:30 【问题描述】:

在使用我的 Selenium Python 程序时,我试图跳过列入黑名单的项目,但我不知道如何使这个 sn-p 工作 -

    channel = driver.find_element_by_xpath('/html/body/ytd-app/div[1]/ytd-page-manager/ytd-watch-flexy/div[3]/div[1]/div/div[7]/div[3]/ytd-video-secondary-info-renderer/div/div[2]/ytd-video-owner-renderer/a').get_attribute('aria-label')

    print(channel)   
    print(blacklistchannels[3])

    if channel in blacklistchannels:
        print('Blacklisted Channel, Skipping...')
        continue
    else:
        print('There is still a problem')

即使在打印时,频道名称和列入黑名单的项目 (3) 完全相同。它仍然跟随 else,并打印出“仍然存在问题”

任何帮助将不胜感激,谢谢!

编辑 - 那里的 continue 与 sn-p 无关,它只是为了继续一个循环。

解决方案 - .Stripping() 黑名单和频道名称,以消除我为换行符所使用的空格和 /n。

【问题讨论】:

显然不完全相同,但我们看不到任何数据。请同时显示channelblacklistedchannel 用相关的 HTML 更新问题 它们不一样 - 可能是空格或其他。发送minimal reproducible example 以获得帮助 - 这段代码太模糊了。 猜测 中,channel 在某个容器中,例如一个列表 我会看看这个***.com/questions/14312869/…,还有,你为什么用'继续'? 【参考方案1】:

很难猜出else() 块被执行的原因。也许相关的 HTML 会帮助我们诊断问题。

但我怀疑 get_attribute('aria-label') 提取的 value 包含 空格 / 空格

解决方案

你可以使用pythonstrip()方法来去除空格/空格,如下:

channel = driver.find_element_by_xpath('/html/body/ytd-app/div[1]/ytd-page-manager/ytd-watch-flexy/div[3]/div[1]/div/div[7]/div[3]/ytd-video-secondary-info-renderer/div/div[2]/ytd-video-owner-renderer/a').get_attribute('aria-label').strip(' \n')
print(channel)   
print(blacklistchannels[3])
if channel in blacklistchannels:
    print('Blacklisted Channel, Skipping...')
else:
    print('There is still a problem')

【讨论】:

我刚刚注意到第二个打印件(列表中的那个)下面有一个空行。这让我意识到这可能是我打印到文本文件中以创建新行的 /n。我将如何剥离 /n 的整个列表? 查看更新的答案并让我知道状态。 blacklistchannels = [x.strip('\n') for x in blacklistchannels] 但在将数据放入列表时,删除换行符可能更容易。 您可以使用print(repr(blacklistchannels[3])) 来查看没有格式化的内容。 @DebanjanB 谢谢,我自己想出来的。 aria-label 中没有任何空格,问题实际上是为我的文本文件中的新行插入了 /n。只是 for 循环列表并将它们剥离到另一个列表中,现在效果很好。【参考方案2】:

为什么不直接使用这个?

channel = driver.find_element_by_xpath('/html/body/ytd-app/div[1]/ytd-page-manager/ytd-watch-flexy/div[3]/div[1]/div/div[7]/div[3]/ytd-video-secondary-info-renderer/div/div[2]/ytd-video-owner-renderer/a').get_attribute('aria-label')

print(channel)   
print(blacklistchannels[3])

if channel in blacklistchannels:
    print('Blacklisted Channel, Skipping...')
    # continue
else:
    print('There is still a problem')

我不确定你为什么在 if 语句中使用 continue

【讨论】:

检查我所做的编辑...【参考方案3】:

关于如何捕捉此类问题的旁注:

>>> a = "hello\r\n"
>>> print(a)
hello

>>> 

如您所知,使用普通打印语句很容易忽略“\r\n”。

这就是repr() 有帮助的地方:

>>> a = "hello\r\n"
>>> print(repr(a))
'hello\r\n'
>>> 

【讨论】:

以上是关于检查列表是不是包含特定字符串,问题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

检查逗号分隔列表是不是包含特定数字[重复]

检查列表是不是包含大于 C# 中的值的项目 [关闭]

检查对象参数是不是包含字母列表

如何使用 Bash 检查文件是不是包含特定字符串

检查字符串是不是仅包含特定字符? [复制]

如何正确检查字符串是不是不包含特定单词?