Python selenium получение текста из текстовой области

#selenium #python-3.8

#Селен #python-3.8

Вопрос:

Я пытаюсь скопировать сообщение текстовой области в переменную, чтобы я мог его проанализировать.

Текстовая область содержит следующее сообщение:

 <?xml version='1.0' encoding='UTF-8'?><Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body><SubmitResponse xmlns="http://eftr</Error></SubmitResponse></Body></Envelope>
 

HTML выглядит следующим образом:

 <textarea class="v-textarea v-widget v-readonly v-has-width v-has-height v-textarea-readonly" rows="5" tabindex="-1" readonly="" style="width: 100%; height: 100%;"></textarea>
 

Я пытаюсь использовать следующие и другие конфигурации, но у меня ничего не получается:

 from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
full_xpath = r'/html/body/div[1]/div/div[2]/div/div[2]/div/div[2]/div/div/div[3]/div/div/div[2]/div/div[2]/div/div/div/div/div[3]/textarea'
path_to_chromedriver = r'C:chromedriver'  # change path as needed
browser = webdriver.Chrome(executable_path=path_to_chromedriver)
.........
.........
content = browser.find_element_by_xpath(full_xpath).text
 

Я не уверен, как достичь вышеуказанного.

В основном print(content) должно получаться следующее:

 <?xml version='1.0' encoding='UTF-8'?><Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body><SubmitResponse xmlns="http://eftr</Error></SubmitResponse></Body></Envelope>
 

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

1. Вы уверены, что xpath верен? Это выглядит довольно хрупким.

2. что значит «хрупкий»? Я щелкаю правой кнопкой мыши и копирую полный xpath.

3. @Zanam: какую ошибку вы получаете?

4. @Zanam Хрупкий означает, что он легко ломается. Вы скопировали полный xpath, но при следующем запуске теста xpath может немного отличаться, поэтому selenium не сможет найти элемент.

Ответ №1:

 from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

textcontent=WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//textarea[@class='v-textarea v-widget v-readonly v-has-width v-has-height v-textarea-readonly']"))).get_attribute("value")
 

в текстовой области текст сохраняется как значение,

пример текстовой области:

 <!DOCTYPE html>
<html>
<body>

<h1>The textarea element</h1>

<form action="/action_page.php">
<label for="w3review">Review of W3Schools:</label>
<textarea id="w3review" name="w3review" rows="4" cols="50">
  At w3schools.com you will learn how to make a website. They offer free tutorials in all web development technologies.
  </textarea>
  <br><br>
  <input type="submit" value="Submit">
</form>

<p>Click the "Submit" button and the form-data will be sent to a page on the 
server called "action_page.php".</p>
</body>
</html> 

вы можете использовать приведенный выше пример html и в консоли попробовать

    $('textarea').value
 

Ответ №2:

используйте следующее xpath , чтобы идентифицировать элемент.

 content = browser.find_element_by_xpath("//textarea[@class='v-textarea v-widget v-readonly v-has-width v-has-height v-textarea-readonly']").text
 

Или используйте get_attribute("innerHTML")

 content = browser.find_element_by_xpath("//textarea[@class='v-textarea v-widget v-readonly v-has-width v-has-height v-textarea-readonly']").get_attribute("innerHTML")
 

Я бы предложил использовать WebDriverWait() и ждать visibility_of_element_located()

 content=WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//textarea[@class='v-textarea v-widget v-readonly v-has-width v-has-height v-textarea-readonly']"))).text
 

вам необходимо импортировать следующие библиотеки

 from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC