Я пытаюсь загрузить исторические данные и нажать на ссылку с историческими данными.Однако, даже если X-код правильный, я получаю эту ошибку:
NoSuchElementException: no such element: Unable to locate element.
Испытания кода:
from selenium.webdriver.support.ui import WebDriverWait from selenium import webdriver driver = webdriver.Chrome(executable_path='/Users/Documents/Coding/chromedriver') url = "https://www.vanguardinvestor.co.uk/investments/vanguard-lifestrategy-100-equity-fund-accumulation-shares/price-performance?intcmpgn=blendedlifestrategy_lifestrategy100equityfund_fund_link" driver.get(url) wait = WebDriverWait(driver, 10) elem = driver.find_element_by_xpath("//*[@id='prices-and-performance-tab']/div/div[4]/div[3]/div[1]/div[1]/div[3]/div/div/div[2]/div/table/tfoot/tr/td/a") webdriver.ActionChains(driver).move_to_element(elem).click(elem).perform()
Чтобы щелкнуть элемент с текстом как Найти более исторические цены , вам нужно активировать WebDriverWait , чтобы элемент был кликабельным , и вы можете использоватьследующее решение:
Блок кода:
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 options = webdriver.ChromeOptions() options.add_argument("--start-maximized") options.add_argument("--disable-extensions") driver = webdriver.Chrome(chrome_options=options, executable_path = r'C:\Utility\BrowserDrivers\chromedriver.exe' ) driver.get("https://www.vanguardinvestor.co.uk/investments/vanguard-lifestrategy-100-equity-fund-accumulation-shares/price-performance?intcmpgn=blendedlifestrategy_lifestrategy100equityfund_fund_link") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@id='bannerButton']"))).click() more_historical_prices = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.LINK_TEXT, "Search for more historical prices"))) driver.execute_script("arguments[0].scrollIntoView(true);", more_historical_prices) WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Search for more historical prices")))
Снимок браузера:
Чтобы щелкнуть элемент, подождите, пока страница загрузится, и элемент станет кликабельным, а затем нажмите кнопку. Попробуйте весь фрагмент.
from selenium.webdriver.support.ui import WebDriverWait from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome(executable_path='/Users/Documents/Coding/chromedriver') url = "https://www.vanguardinvestor.co.uk/investments/vanguard-lifestrategy-100-equity-fund-accumulation-shares/price-performance?intcmpgn=blendedlifestrategy_lifestrategy100equityfund_fund_link" driver.get(url) element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()[contains(.,'Price & Performance')]]"))) element.click