Python'da Selenium WebDriver ile metin nasıl alınır


92

Selenium WebDriver kullanarak metin almaya çalışıyorum ve işte kodum. Lütfen XPath kullanmak istemediğime dikkat edin, çünkü benim durumumda kimlik web sayfasının her yeniden başlatılışında değişiyor.

Kodum:

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>

Bunu nasıl düzeltebilirim?


Etkileşimli olarak yapılırsa, sonuç "AttributeError:" geçerli aşama "nesnesinin" getText "özniteliği yok"
Peter Mortensen

Yanıtlar:


166

Sadece istiyorsun .text.

Daha sonra Doğrulayabilmemiz sonra sende oldugunu ne geçmek çalışmayın, bekliyoruz o olmalıdır.


Bu hatayı alıyorum - 'WebDriver' nesnesinin 'getText' özniteliği yok
user3121891

1
@ user3121891, öyle .text.
Arran

Şimdi şu kodu kullanıyorum: driver.find_element_by_class_name ("geçerli-aşama"). Text ("metnim") eğer text: print "pass" else: print "Fail" ve bu hatayı alıyorum - 'unicode' nesnesi çağrılamaz
user3121891

13
@ user3121891 driver.find_element_by_class_name("current-stage").text.... kendi başına sadece metin . Başka bir şey yok.
Arran

1
Selenyum nesneleri listesinde döngü yapmak .textve for döngüsünün her bir öğesine uygulamak isteyeceksiniz .
Paul

72

Python

element.text

Java

element.getText()

C #

element.Text

Yakut

element.text

1
Bununla ilgili Python için herhangi bir belge bulamıyorum, bunu nerede buluyorsunuz?
Amon

1
@CharlesSmith ., VSCode'da öğenin arkasına bir öğe eklerseniz, sınıfın neyi kabul ettiğine bağlı olarak size bir öneri listesi verilir. Ben bunu böyle buldum.
CodeSpent

1
Evet, IntelliJ'de de aynı şeyi fark ettim, sadece neden belgelerde olmadığını merak ediyordum
Amon

1
@Charles Smith: Web elementinde , "Get Element Text" alt bölümünde (sayfanın altında). Altı farklı dil vardır ve varsayılanı JavaScript içindir. Python kod örneğini görmek için "Python" a tıklayın .
Peter Mortensen


6

Kullanabilirsiniz:

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

Bu, öğe içindeki metni döndürür ve bundan sonra onu doğrulamanıza izin verir.


3

Bu doğru cevap. İşe yaradı!!

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

Özel bir sınıfta bir şey alamadığımda veya kimliklerini değiştiremediğimde bunu kesinlikle paha biçilmez buldum:

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

Neden kesinlikle paha biçilmez olduğunu açıklayabilir misiniz ?
Peter Mortensen

Neden .click()gereklidir? Neden üç satır var .text?
Peter Mortensen

Soru "Lütfen XPath kullanmak istemediğimi unutmayın" dedi .
Peter Mortensen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.