点击后不等待新元素的隐式等待

2024-04-19 14:18:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想知道是否有更可靠的方法来等待元素,或者它只是一个顽固的页面。我对Python Selenium还相当陌生,但是我注意到没有下面的Sleep wait https://casino.bovada.lv/(现在变灰)命令Selenium会单击Poker选项卡,然后在页面正确加载之前它会单击horse的选项卡,而这次单击什么也不做。我可以使用sleep wait命令,但有点违背了等待元素出现的目的。你知道吗

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

driver = webdriver.Chrome(executable_path=r'C:\Brother\chromedriver.exe')
driver.set_window_size(1024, 600)
driver.maximize_window()
driver.get("https://sports.bovada.lv/soccer")

time.sleep( 4 )

element = WebDriverWait(driver, 20000).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "#ui-app-primary-menu > a.primary-menu_item.channel-poker.channel.channel-poker.ng-isolate-scope > span")));

element.click();

driver.get("https://casino.bovada.lv/")
#time.sleep( 4 )
element = WebDriverWait(driver, 20000).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "#ui-app-primary-menu > a.primary-menu_item.channel-horses.channel.channel-horses > span")));
element.click();
time.sleep( 15 )
###
driver.close()

我也试过了

WebDriverWait(driver, 2222).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#ui-app-primary-menu > a.primary-menu_item.channel-poker.channel.channel-poker.ng-isolate-scope > span'))).click();

WebDriverWait(driver, 2222).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#ui-app-primary-menu > a.primary-menu_item.channel-horses.channel.channel-horses > span'))).click();

Tags: fromimportuibydriverseleniumchannelsleep
1条回答
网友
1楼 · 发布于 2024-04-19 14:18:03

我想展示递归等待算法,我喜欢在类似的情况下使用它:

startTime = Date()
def recursive_wait(By: by):
        timeout = 3000
        duration = 0
        try:
            wait = WebDriverWait(driver, 5)
            wait.until(EC.visibility_of_element_located(by))
            wait.until(EC.element_t_be_clickable(by))
        except (TimeoutException, ElementNotVisibleException e):
            duration = startTime.compareTo(Date())
            if (timeout < duration):
                recursive_wait(by)

这将等待元素3000秒,但check is元素每5秒出现一次。另外,您可以在try块中等待许多元素。你知道吗

相关问题 更多 >