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?


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 .


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

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

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.


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)

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.