Jak uzyskać tekst za pomocą sterownika internetowego selenu w Pythonie

88

Próbuję uzyskać tekst za pomocą sterownika internetowego selenu, a oto mój kod. Proszę zauważyć, że nie chcę używać Xpath, ponieważ w moim przypadku id zmienia się przy każdym ponownym uruchomieniu strony, proszę o pomoc.

mój kod:

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>
user3121891
źródło

Odpowiedzi:

160

Chcesz po prostu .text.

Następnie możesz go zweryfikować po uzyskaniu go, nie próbuj przekazywać tego, czego oczekujesz, że powinien.

Arran
źródło
Otrzymuję ten błąd - obiekt „WebDriver” nie ma atrybutu „getText”
user3121891
1
@ user3121891, to jest .text.
Arran
Teraz używam tego kodu: driver.find_element_by_class_name ("current-stage"). Text ("my text") if text: print "pass" else: print "Fail" i otrzymuję ten błąd - obiekt 'unicode' nie jest wywoływany
user3121891
13
@ user3121891 driver.find_element_by_class_name("current-stage").text.... sam tekst . Nic więcej.
Arran
1
Będziesz chciał przejrzeć listę obiektów selenu i zastosować znak .textna każdym elemencie pętli for.
Paweł
68

Pyton

element.text

Jawa

element.getText()

DO#

element.Text

Rubin

element.text
Shubham Jain
źródło
1
Nie mogę znaleźć żadnej dokumentacji na ten temat dla Pythona. Gdzie to znajdujecie?
Charles Smith
1
@CharlesSmith Jeśli umieścisz a .po elemencie w VSCode, otrzymasz listę sugestii opartych na tym, co akceptuje klasa. Tak to znalazłem.
CodeSpent
1
Tak, zauważyłem to samo w IntelliJ, po prostu zastanawiałem się, dlaczego nie ma tego w dokumentach
Charles Smith
9

Znalazłem to, odpowiedź brzmi

driver.find_element_by_class_name("ctsymbol").text
tył
źródło
6

Możesz użyć:

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

Spowoduje to zwrócenie tekstu w elemencie i umożliwi późniejszą weryfikację.

kishlaya kumar
źródło
3

Dzięki, to jest poprawna odpowiedź, zadziałało !!

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 Succesfull")
driver.find_element_by_xpath("//div[@class='pdp-promo-title pdp-title']").click()`enter code here`
SpecialPrice =driver.find_element_by_xpath("//div[@class='pdp-promo-title pdp-title']").text
print(SpecialPrice)
subhasis
źródło
0

Uważam to za absolutnie bezcenne, gdy nie mogę pobrać czegoś w niestandardowej klasie lub zmienić identyfikatorów:

driver.find_element_by_xpath ("// [zawiera (text (), 'Pokaż następną dostępną datę')]"). click () driver.find_element_by_xpath ("// [zawiera (text (), 'Pokaż następną dostępną datę')] ") .text driver.find_element_by_xpath (" // [zawiera (text (), 'Dostępne')] "). text driver.find_element_by_xpath (" // [zawiera (text (), 'Dostępność')] "). tekst

user7693644
źródło
Może mógłbyś oznaczyć swój kod jako kod za pomocą znacznika ``.
Vivian De Smedt