Python-Селен «элемент, с которым невозможно взаимодействовать»

#python #selenium #automation #sudoku

Вопрос:

Я пытался заполнить судоку селеном, но каждый раз поднимал элемент, с которым невозможно взаимодействовать

Соответствующий код:

 from selenium import webdriver  driver = webdriver.Chrome() driver.get('https://sudokutable.com/')  driver.find_element_by_xpath('//*[@id="body_wrapper"]/main/section[2]/div[1]/div[2]/div[1]').send_keys('1')  

Я тоже пытаюсь это сделать, но результат тот же:

 sleep(1) num = driver.find_element_by_xpath('//*[@id="body_wrapper"]/main/section[2]/div[1]/div[2]/div[1]') num.click() num.send_keys('1')  

Если кто-то знает какой-либо способ отправки ключей, я очень благодарен

Ответ №1:

Сначала нам нужно закрыть всплывающее окно Cookie.

Затем нам нужно найти пустые ячейки и попытаться заполнить их. Пустую ячейку можно распознать по class атрибуту в svg теге.

 DOM when the cell is already filled lt;div class="game-grid__cell" data-group="1" data-row="0" data-column="4"gt;  lt;svg class="default" viewBox="0 0 72 72"gt;  DOM when the cell is empty lt;div class="game-grid__cell" data-group="0" data-row="0" data-column="1"gt;  lt;svg class="" viewBox="0 0 72 72"gt;  
 # Imports required: from selenium.webdriver import ActionChains from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By  driver.get("https://sudokutable.com/") actions =ActionChains(driver) wait = WebDriverWait(driver,30)  # Close Cookie pop-up wait.until(EC.element_to_be_clickable((By.ID,"agree_cookies"))).click()  # Find empty cells and use indexing to fill them up cell = driver.find_elements_by_xpath("//div[@class='game-grid__group'][1]/div/*[name()='svg' and @class='']") actions.move_to_element(cell[0]).click().send_keys("1").perform()  

Ответ №2:

Попробуйте это вместо num.click() :

 driver.execute_script("arguments[0].click();", num)  

Для отправки ключей используйте:

 driver.find_element_by_tag_name('body').send_keys('1')