我正在尝试编写一系列事件,这些事件依赖于 selenium 中的最后一个事件。首先单击加载新页面的登录,然后单击该页面上的滚动框,然后单击滚动框内的按钮,该按钮在滚动框被单击之前不会被加载。
我正在努力停止使用时间。睡眠(X),因为我读到了这是一种糟糕的做法,我正在努力学习更多关于 selenium 的工作原理。
我得到的不起作用的代码是
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as ec
login_box = WebDriverWait(driver, 5).until(
ec.element_to_be_clickable((By.XPATH, "//*[@id=\"loginAppRoot\"]/div[1]/div[1]/button/span")))
login_box.click()
print("login")
scroll_box = WebDriverWait(driver, 5).until(
ec.element_to_be_clickable((By.XPATH, "//*[@id=\"searchBarFilterDropdown\"]")))
scroll_box.click()
box_inside_scroll = WebDriverWait(driver, 5).until(
ec.element_to_be_clickable((By.XPATH, "//*[@id=\"global-header\"]/nav[1]/div[2]/div/div[1]/ul/li[44]/a")))
box_inside_scroll.click()
我能让它工作的唯一方法是把time.sleep(2)
放在scroll_box.click()
之前。根据我的理解,网络驱动程序的等待和预期条件应该会使我不需要使用时间。睡眠。有人能帮我删除预定义的等待时间吗?
2条答案
按热度按时间htrmnn0y1#
如果你需要更长的时间等待,你只需要改变超时时间。如果你只需要再多2秒钟,那就试试吧
在使用WebDriverWait时,在括号中,您的第一个输入是您的驱动程序,第二个输入是您希望Selify在超时之前等待的时间。您可以尝试10,而不是7,因此在尝试单击滚动框之前,它会等待10秒。
vlurs2pr2#
更改超时对我没有任何影响,所以这是另一个答案。
不是一个好的行为,但它节省了你的时间:
我想点击元素“断路器控制”,我需要页面被加载,所以我这样做
当它没有等待足够的时间时,我得到的错误是:
我希望它能帮上忙。