วิธีรับข้อความด้วย Selenium WebDriver ใน Python


92

ฉันพยายามรับข้อความโดยใช้ Selenium WebDriver และนี่คือรหัสของฉัน โปรดทราบว่าฉันไม่ต้องการใช้ XPath เพราะในกรณีของฉัน ID จะเปลี่ยนไปในทุกครั้งที่เปิดหน้าเว็บใหม่

รหัสของฉัน:

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>

ฉันจะแก้ไขปัญหานี้ได้อย่างไร?


หากทำแบบโต้ตอบผลลัพธ์อาจเป็นข้อความแสดงข้อผิดพลาด"AttributeError:" current-stage "object ไม่มีแอตทริบิวต์" getText ""
Peter Mortensen

คำตอบ:


166

.textคุณต้องการเพียงแค่

จากนั้นคุณสามารถตรวจสอบได้หลังจากได้รับแล้วอย่าพยายามส่งผ่านในสิ่งที่คุณคาดหวังว่าควรจะมี


ฉันได้รับข้อผิดพลาดนี้ - วัตถุ 'WebDriver' ไม่มีแอตทริบิวต์ 'getText'
user3121891

1
@ user3121891 มัน.text.
Arran

ตอนนี้ฉันใช้รหัสนี้: driver.find_element_by_class_name ("current-stage"). text ("ข้อความของฉัน") ถ้า text: print "pass" else: พิมพ์ "Fail" และได้รับข้อผิดพลาดนี้ - ไม่สามารถเรียกวัตถุ 'unicode' ได้
user3121891

13
@ user3121891 driver.find_element_by_class_name("current-stage").text.... แค่textเอง. ไม่มีอะไรอื่น
Arran

1
คุณจะต้องการวนซ้ำรายการวัตถุซีลีเนียมและใช้.textกับแต่ละรายการของห่วงสำหรับ
พอล

72

Python

element.text

Java

element.getText()

ค#

element.Text

ทับทิม

element.text

1
ฉันไม่พบเอกสารใด ๆ เกี่ยวกับ Python พวกคุณหาสิ่งนี้ได้ที่ไหน
อมร

1
@CharlesSmith ถ้าคุณใส่.หลังองค์ประกอบใน VSCode คุณจะได้รับรายการคำแนะนำตามสิ่งที่คลาสยอมรับ นั่นคือวิธีที่ฉันพบสิ่งนี้
CodeSpent

1
ใช่ฉันสังเกตเห็นสิ่งเดียวกันใน IntelliJ เพียงแค่สงสัยว่าทำไมมันไม่อยู่ในเอกสาร
Amon

1
@ Charles Smith: อยู่ในองค์ประกอบของเว็บส่วนย่อย"Get Element Text" (ที่ด้านล่างของหน้า) มีหกภาษาที่แตกต่างกันและค่าเริ่มต้นคือ JavaScript คลิกที่"Python"เพื่อดูตัวอย่างโค้ด Python
Peter Mortensen


6

คุณสามารถใช้ได้:

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

สิ่งนี้จะส่งคืนข้อความภายในองค์ประกอบและจะให้คุณตรวจสอบได้หลังจากนั้น


3

นี่คือคำตอบที่ถูกต้อง มันได้ผล !!

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

ฉันพบว่าสิ่งนี้มีค่าอย่างยิ่งเมื่อไม่สามารถคว้าบางสิ่งในคลาสที่กำหนดเองหรือเปลี่ยนรหัสได้:

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

คุณสามารถอธิบายได้ไหมว่าทำไมมันจึงมีค่ามาก?
Peter Mortensen

ทำไมจึง.click()จำเป็น? ทำไมต้องมีสามบรรทัดด้วย.text?
Peter Mortensen

คำถามที่กล่าวว่า"โปรดทราบว่าฉันไม่ต้องการที่จะใช้ XPath"
Peter Mortensen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.