Selenium Python-显式等待不起作用
在等待页面呈现js时,我无法让显式等待工作,因此我被迫使用time.sleep()以使代码按预期工作 我看了文件,还是没能让它工作。 带有time.sleep()的注释掉的代码部分按预期工作。 WebDriverWait部分运行但不等待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
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编写了一个框架,用于处理这些繁琐的任务。官方绑定有点古怪,因为它们在大型站点/应用程序的工作流方面有点过时。如果你想查看它,你可以查看它