【问题标题】:setTimeout does not work in python Selenium execute scriptsetTimeout 在 python Selenium 执行脚本中不起作用
【发布时间】:2017-08-30 14:10:33
【问题描述】:

您好,我试图暂停 Selenium 的执行几秒钟以等待 Modal 弹出窗口显示。 但是time.sleep(5) 不能使用 phantomJS(我听说 PhantomJS 不支持睡眠)。 所以我想出了setTimeout。

driver.execute_script('setTimeout(function(){"scroll(0, 300);"}, 3600);') 

但它甚至在 Chrome Selenium 驱动程序中也不起作用。

尽管driver.execute_script('scroll(0, 300);') 有效,但我不知道如何在 selenium 中执行 setTimeout。

【问题讨论】:

  • 为什么不只是import time 并在driver.execute_script('scroll(0, 300);') 之前设置time.sleep(3.6)
  • @Andersson 我试过了。但我不能使用 time.sleep(3.6)。我需要等待 madal 弹出窗口显示。当我使用 time.sleep(3) 时,它会引发“元素当前不可交互且可能无法操作”错误。当我得到屏幕截图时,模式弹出窗口不显示。
  • @VivekMaru 我已经尝试过driver.set_page_load_timeout(10)driver.set_script_timeout(3) 和`driver.implicitly_wait(10)'。但它没有用。

标签: javascript python selenium


【解决方案1】:

如果你需要满足一些特定的条件,你可以使用ExplicitWait + ExpectedConditions,比如:

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "Specify css selector for your modal div")))
driver.execute_script('scroll(0, 300);')

*您可以使用任何您喜欢的选择器,如By.XPATHBy.ID

此代码应该允许您在执行脚本之前等待(最多 10 秒)直到所需元素的可见性

【讨论】:

  • 我试过你提到的方法。但是当我得到截图时,模态 div 没有出来。 WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[@id=\"teacher_booked_modal\"]/div/div/div")))
猜你喜欢
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2019-05-17
  • 2018-11-30
  • 2015-11-28
  • 2017-08-15
相关资源
最近更新 更多