Come ottenere testo con Selenium WebDriver in Python


92

Sto cercando di ottenere del testo utilizzando Selenium WebDriver ed ecco il mio codice. Tieni presente che non voglio utilizzare XPath, perché nel mio caso l'ID viene cambiato ad ogni riavvio della pagina web.

Il mio codice:

text = driver.find_element_by_class_name("current-stage").getText("my text")

HTML:

<span class="current-text" id="yui_3_7_0_4_1389185744113_384">my text</span>

Come posso risolvere questo problema?


Se fatto in modo interattivo, il risultato potrebbe essere qualcosa di simile al messaggio di errore "AttributeError: l'oggetto 'current-stage' non ha attributo 'getText'"
Peter Mortensen

Risposte:


166

Vuoi solo .text.

Puoi quindi verificarlo dopo averlo ottenuto, non tentare di trasmettere ciò che ti aspetti che dovrebbe avere.


Ricevo questo errore: l'oggetto "WebDriver" non ha attributo "getText"
user3121891

1
@ user3121891, è .text.
Arran

Ora sto usando questo codice: driver.find_element_by_class_name ("current-stage"). Text ("my text") if text: print "pass" else: print "Fail" e ottenendo questo errore - l'oggetto 'unicode' non è richiamabile
user3121891

13
@ user3121891 driver.find_element_by_class_name("current-stage").text.... solo testo da solo. Nient'altro .
Arran

1
Avrai intenzione di scorrere l'elenco degli oggetti di selenio e applicare il .textsu ogni elemento del ciclo for.
Paul

72

Pitone

element.text

Giava

element.getText()

C #

element.Text

Rubino

element.text

1
Non riesco a trovare alcuna documentazione su questo per Python, dove lo state trovando?
Amon

1
@CharlesSmith se metti un .elemento dopo l'elemento in VSCode, ti verrà fornito un elenco di suggerimenti basati su ciò che la classe accetta. È così che l'ho trovato.
CodeSpent

1
Sì, ho notato la stessa cosa in IntelliJ, mi chiedevo perché non fosse nei documenti
Amon

1
@Charles Smith: è sull'elemento Web , sottosezione "Ottieni testo elemento" (in fondo alla pagina). Sono disponibili sei lingue diverse e l'impostazione predefinita è JavaScript. Fare clic su "Python" per vedere l'esempio di codice Python.
Peter Mortensen

9

La risposta è:

driver.find_element_by_class_name("ctsymbol").text

6

Puoi usare:

element = driver.find_element_by_class_name("class_name").text

Ciò restituirà il testo all'interno dell'elemento e ti consentirà di verificarlo successivamente.


3

Questa è la risposta corretta. Ha funzionato!!

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome("E:\\Python\\selenium\\webdriver\\chromedriver.exe")
driver.get("https://www.tatacliq.com/global-desi-navy-embroidered-kurta/p-mp000000000876745")
driver.set_page_load_timeout(45)
driver.maximize_window()
driver.implicitly_wait(2)
driver.get_screenshot_as_file("E:\\Python\\Tatacliq.png")
print ("Executed Successfully")
driver.find_element_by_xpath("//div[@class='pdp-promo-title pdp-title']").click()
SpecialPrice = driver.find_element_by_xpath("//div[@class='pdp-promo-title pdp-title']").text
print(SpecialPrice)

0

Ho trovato questo assolutamente inestimabile quando non sono in grado di prendere qualcosa in una classe personalizzata o cambiare ID:

driver.find_element_by_xpath("//*[contains(text(), 'Show Next Date Available')]").click()
driver.find_element_by_xpath("//*[contains(text(), 'Show Next Date Available')]").text
driver.find_element_by_xpath("//*[contains(text(), 'Available')]").text
driver.find_element_by_xpath("//*[contains(text(), 'Avail')]").text

Puoi spiegare perché è assolutamente inestimabile?
Peter Mortensen

Perché è .click()necessario? Perché ci sono tre righe con .text?
Peter Mortensen

La domanda diceva "Per favore nota che non voglio usare XPath" .
Peter Mortensen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.