#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 проблемы:
- Вы пытаетесь получить доступ к элементу ввода уравнения до того, как страница будет полностью загружена.
Вот почему вы получаете эту ошибку.
Вы должны добавить ожидание перед этим.
Я также изменил локатор, чтобы быть более точным.
equation = WebDriverWait(web, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#source3 textarea')))
equation.send_keys(message Keys.RETURN)
- Кроме того, вы используете неправильный локатор для элемента ответа.
Попробуйте это:
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