Cara mendapatkan teks dengan Selenium WebDriver dengan Python

92

Saya mencoba mendapatkan teks menggunakan Selenium WebDriver dan ini kode saya. Harap dicatat bahwa saya tidak ingin menggunakan XPath, karena dalam kasus saya ID berubah pada setiap peluncuran ulang halaman web.

Kode saya:

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>

Bagaimana cara memperbaikinya?

pengguna3121891
sumber
Jika dilakukan secara interaktif, hasilnya mungkin seperti pesan kesalahan "AttributeError: objek 'current-stage' tidak memiliki atribut 'getText'"
Peter Mortensen

Jawaban:

166

Anda hanya ingin .text.

Anda kemudian dapat memverifikasinya setelah Anda mendapatkannya, jangan mencoba untuk meneruskan apa yang Anda harapkan .

Arran
sumber
Saya mendapatkan kesalahan ini - objek 'WebDriver' tidak memiliki atribut '
getText
1
@ user3121891, ini .text.
Arran
Sekarang saya menggunakan kode ini: driver.find_element_by_class_name ("current-stage"). Text ("my text") if text: print "pass" else: print "Fail" dan mendapatkan kesalahan ini - objek 'unicode' tidak dapat dipanggil
pengguna3121891
13
@ user3121891 driver.find_element_by_class_name("current-stage").text.... cukup kirim teks saja. Tidak ada yang lain.
Arran
1
Anda akan ingin mengulang melalui daftar objek selenium dan menerapkan .textpada setiap item dari perulangan for.
Paul
72

Python

element.text

Jawa

element.getText()

C #

element.Text

Rubi

element.text
Shubham Jain
sumber
1
Saya tidak dapat menemukan dokumentasi apa pun tentang ini untuk Python, di mana kalian menemukan ini?
Amon
1
@CharlesSmith jika Anda meletakkan .setelah elemen di VSCode, Anda akan diberi daftar saran berdasarkan apa yang diterima kelas. Begitulah cara saya menemukan ini.
CodeSpent
1
Ya, saya perhatikan hal yang sama di IntelliJ, hanya bertanya-tanya mengapa tidak ada di dokumen
Amon
1
@ Charles Smith: Ini ada di elemen Web , sub bagian "Dapatkan Teks Elemen" (di bagian bawah halaman). Ada enam bahasa berbeda dan default untuk JavaScript. Klik "Python" untuk melihat contoh kode Python.
Peter Mortensen
9

Jawabannya adalah:

driver.find_element_by_class_name("ctsymbol").text
belakang
sumber
6

Kamu dapat memakai:

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

Ini akan mengembalikan teks di dalam elemen dan memungkinkan Anda untuk memverifikasinya setelah itu.

kishlaya kumar
sumber
3

Ini jawaban yang benar. Berhasil !!

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)
subhasis
sumber
0

Saya telah menemukan ini benar-benar sangat berharga ketika tidak dapat mengambil sesuatu di kelas khusus atau mengubah 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
pengguna7693644
sumber
Bisakah Anda menjelaskan mengapa itu benar-benar sangat berharga?
Peter Mortensen
Mengapa .click()perlu? Mengapa ada tiga baris dengan .text?
Peter Mortensen
Pertanyaannya mengatakan "Harap dicatat bahwa saya tidak ingin menggunakan XPath" .
Peter Mortensen