Selenium Python-显式等待不起作用

Selenium Python-显式等待不起作用,python,selenium,time,web-scraping,Python,Selenium,Time,Web Scraping,在等待页面呈现js时,我无法让显式等待工作,因此我被迫使用time.sleep()以使代码按预期工作 我看了文件,还是没能让它工作。 带有time.sleep()的注释掉的代码部分按预期工作。 WebDriverWait部分运行但不等待 from selenium import webdriver import time from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support

在等待页面呈现js时,我无法让显式等待工作,因此我被迫使用time.sleep()以使代码按预期工作

我看了文件,还是没能让它工作。

带有time.sleep()的注释掉的代码部分按预期工作。 WebDriverWait部分运行但不等待

from selenium import webdriver
import time
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()
url = "https://www.target.com/"

# tells the driver to wait up to 10 seconds before timing out
# for data that will be loaded on the screen
DELAY = 10
driver.implicitly_wait(DELAY)
SLEEP_TIME = 1

# navigate to the page
driver.get(url)
time.sleep(SLEEP_TIME)

try:

    WebDriverWait(driver, DELAY).until(EC.visibility_of_element_located((By.XPATH, """//*[@id="js-toggleLeftNav"]/img"""))).click()
    WebDriverWait(driver, DELAY).until(EC.visibility_of_element_located((By.XPATH, """//*[@id="5"]"""))).click()
    WebDriverWait(driver, DELAY).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#leftNavigation > ul:nth-child(2)")))
    """
    # opens up the side bar javascript
    driver.find_element_by_xpath("""//*[@id="js-toggleLeftNav"]/img""").click()
    time.sleep(SLEEP_TIME)

    # clicks on browse by category
    driver.find_element_by_xpath("""//*[@id="5"]""").click()
    time.sleep(SLEEP_TIME)

    # gets all the category elements
    items = driver.find_element_by_css_selector("#leftNavigation > ul:nth-child(2)").find_elements_by_tag_name("li")
    time.sleep(SLEEP_TIME)
    """
    # gets the hyperlink and category name but the first and the last,
    # since the first is back to main menu and the last is exit
    category_links = {}
    for i in range(1, len(items) - 1):
        hyperlink = items[i].find_element_by_tag_name('a').get_attribute('href')
        category_name = items[i].text
        category_links[category_name] = hyperlink

    print(category_links)

except:
    print("Timed out.")

此版本成功加载站点,等待其渲染,然后打开侧菜单。注意wait.until方法是如何成功使用的,请等待页面加载。您应该能够将下面的模式与其他代码一起使用,以实现您的目标

代码

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

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("https://www.target.com/")

wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#leftNavigation > ul:nth-child(2)")))
button = driver.find_element_by_xpath("""//*[@id="js-toggleLeftNavLg"]""")
button.click()
time.sleep(5)


driver.quit()

运行按钮时仍然获取元素不可见错误。单击()“selenium.common.exceptions.ElementNotVisibleException:Message:element not VisibleException”@JonathanIshii仔细检查xpath id,您可能获取的页面版本与我的不同。啊,我找到了。我需要回忆一下wait.until,因为每次调用click()时js都会重新加载页面。非常感谢你!我用python为selenium编写了一个框架,用于处理这些繁琐的任务。官方绑定有点古怪,因为它们在大型站点/应用程序的工作流方面有点过时。如果你想查看它,你可以查看它