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

#python #selenium #selenium-webdriver

Вопрос:

Поэтому я пытаюсь создать программу, которая решает сложные математические задачи, которые вводит пользователь. Я использую веб-сайт mathpapa для решения этих уравнений.

 import selenium
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
from selenium.webdriver.common.keys import Keys 

PATH = 'C:Program Fileschromedriver.exe'

message = input("Enter a math problem: ")

web = webdriver.Chrome(PATH)
web.get('https://www.mathpapa.com/algebra-calculator.html')


equation = web.find_element_by_xpath('//*[@id="source3"]/span[2]')
equation.send_keys(message   Keys.RETURN)

answer = WebDriverWait(web, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="solout3"]/div[2]')))
print(answer.text)
 

Я сталкиваюсь с ошибкой на линии equation = web.find_element_by_xpath('//*[@id="source3"]/span[2]')
Ошибка заключается в том, что элемент недоступен для взаимодействия, есть ли другой способ заставить его ввести сообщение в текстовую панель на mathpapa?

Ответ №1:

В вашем коде есть 2 проблемы:

  1. Вы пытаетесь получить доступ к элементу ввода уравнения до того, как страница будет полностью загружена.
    Вот почему вы получаете эту ошибку.
    Вы должны добавить ожидание перед этим.
    Я также изменил локатор, чтобы быть более точным.
 equation = WebDriverWait(web, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#source3 textarea')))
equation.send_keys(message   Keys.RETURN)
 
  1. Кроме того, вы используете неправильный локатор для элемента ответа.
    Попробуйте это:
 answer = WebDriverWait(web, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div#solout3 mn')))
print(answer.text)
 

Комментарии:

1. К сожалению, он все еще возвращает ту же ошибку, но в строке «Отправить ключи» говорится, что он не может взаимодействовать. Я полагаю, что по какой-то причине он думает, что мы не можем вводить там текст.

2. Хорошо, пожалуйста, попробуйте обновленный ответ. Я надеюсь, что на этот раз все будет лучше

3. Это то, что я сделал, извините, я думаю, мне следовало уточнить это подробнее, но с вашим обновленным ответом я все еще получаю эту ошибку

4. Ты уверен? я обновил селектор, чтобы он был '#source3 textarea'

5. Попробуйте установить contentEditable значение true