【问题标题】:Why does my for loop only run when inside of a while loop?为什么我的 for 循环只在 while 循环内运行?
【发布时间】:2021-08-29 16:13:06
【问题描述】:

您好,由于某种原因,此代码有效。我不知道为什么:

some = 0
n = 5
while some == 0:
    for title in itertools.islice(driver.find_elements_by_css_selector("a[class='link-title']"), n):
        print(title.text)
        some += 1

如果我删除 while 循环并只运行 for 循环,我没有输出。

我的目标是收集网页中出现的前五个标题,因此是 itertools。最初,我尝试使用 while 循环来执行此操作,但它只是为我提供了所有标题。这就是我遇到这种看似有效的奇怪解决方案的原因。

当我尝试单独使用 for 循环运行它时,没有 while 循环,它没有给我任何输出。我没有得到我想要的标题列表。

但我不喜欢它。我不知道它为什么会起作用

【问题讨论】:

  • 我很困惑。哪个代码不产生输出?你说这是你删除while循环的那个。
  • while 循环在这里不起作用。当然,您正在做其他事情。
  • @Mohammad: (或者如果find_elements_by_css_selector() 返回空,while 循环将是一个无限循环)
  • @quamrana 将我的问题编辑为仅包含一个代码 sn-p 以减少混乱。由于下面接受的答案,我确实找到了原因:)

标签: python css python-3.x selenium


【解决方案1】:

我想你的问题是关于时间的。您的代码必须等到元素完全加载。 您可以使用 selenium 预建的计时器命令

WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CLASS_NAME, "link-title")))

或其他更简单的解决方案

time.sleep(2)

【讨论】:

  • 谢谢!我实际上最终使用了 driver.implicit_wait(2),但如果不是这个评论,我就不会发现这个问题。你为我节省了很多时间!
猜你喜欢
  • 2019-11-10
  • 2018-11-05
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
相关资源
最近更新 更多