#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')