Вам нужно подождать, пока он станет кликабельным:
# I have fixed xpath
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='AutoNumber1']//a[contains(., 'qui.')]"))
)
element.click()
Примечание: вам нужно сделать несколько импортов:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
Также можно использовать CSS-селектор, чтобы найти элемент:
#AutoNumber1 > tbody > tr:nth-child(3) > td:nth-child(2) > p:nth-child(3) > font > a
и
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, "#AutoNumber1 > tbody > tr:nth-child(3) > td:nth-child(2) > p:nth-child(3) > font > a"))
)
element.click()
РЕДАКТИРОВАТЬ: Вы должны переключиться на фрейм, прежде чем найти свой элемент следующим образом:
driver.switch_to.frame(driver.find_element_by_xpath("//frame[@name = 'principale']"))
Таким образом, полный код будет таким:
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
url = "https://www.coeweb.istat.it/"
driver = webdriver.Chrome()
driver.get(url)
driver.switch_to.frame(driver.find_element_by_xpath("//frame[@name = 'principale']")) # switches to frame
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//*[@id='AutoNumber1']//a[contains(., 'qui.')]"))
)
element.click()
driver.switch_to.default_content() # switch back to default content
Объяснение: вы не можете взаимодействовать с элементами, которые находятся в iframe
или в frame
. Чтобы сделать это, вы должны найти frame
, переключиться на него, сделать что-то и затем переключиться обратно на содержимое по умолчанию