【发布时间】:2018-07-07 23:53:01
【问题描述】:
我对 Python 完全陌生,刚刚了解了列表理解,这令人印象深刻。我想知道是否有类似的方法可以减少以下if 语句。
if len(browser.find_elements_by_xpath('//span[@gogo-test="backers"]')) > 0:
backers = [sub for sub in browser.find_element_by_xpath('//span[@gogo-test="backers"]').text.split() if sub.isdigit()][0]
理想情况下,我想使用backers = [sub for sub in browser.find_element_by_xpath('//span[@gogo-test="backers"]').text.split() if sub.isdigit()][0],但是,与 Scrapy 不同的是,Selenium 在找不到任何东西时不会返回None,而且肯定会有browser.find_element_by_xpath('//span[@gogo-test="backers"]') 不存在的情况.
谢谢
【问题讨论】:
-
有一种方法可以做到这一点(您可以通过将两个条件与
and粘合在一起来将它们放在列表理解中,但我建议不要这样做,因为它会变得非常麻烦。你现在有就好了。 -
@RushabhMehta 但列表理解中的
for循环首先取决于browser.find_element_by_xpath('//span[@gogo-test="backers"]')是否存在?? -
这实际上可能会改善这种情况。尝试完全删除 if 子句。看看你得到了什么!我怀疑如果 len = 0,那么支持者将是一个空列表
-
所以,运行这个
backers = [sub for sub in browser.find_element_by_xpath('//span[@gogo-test="backers"]').text.split() if sub.isdigit()],然后看看它有什么。暂时不要选择第一个元素,因为它可能不存在。 -
@RushabhMehta 当然,我想我会尝试删除
[0]
标签: python python-3.x python-2.7 selenium