如何在 Python 中使用 Selenium WebDriver 获取文本

Posted

技术标签:

【中文标题】如何在 Python 中使用 Selenium WebDriver 获取文本【英文标题】:How to get text with Selenium WebDriver in Python 【发布时间】:2014-01-26 14:20:07 【问题描述】:

我正在尝试使用 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 has no attribute 'getText'" 【参考方案1】:

你只想要.text

然后您可以在获得它之后验证它,不要尝试传递您期望它应该有的东西。

【讨论】:

我收到此错误 - 'WebDriver' 对象没有属性 'getText' @user3121891,它是.text @user3121891 driver.find_element_by_class_name("current-stage").text ....只需 text 就可以了。 没有别的。 您将要遍历 selenium 对象列表并在 for 循环的每个项目上应用 .text 是的@Arran,当我检查元素时,它显示了完整的文本,但是当我尝试抓取它时,我只能检索到网站上实际显示的缩写版本(该网站这样做是因为某些文本对于预期的样式可能太长)【参考方案2】:

Python

element.text

Java

element.getText()

C#

element.Text

红宝石

element.text

【讨论】:

我找不到任何关于 Python 的文档,你们在哪里找到的? @CharlesSmith 如果你在 VSCode 中的元素后面加上 .,你会得到一个基于类接受的建议列表。我就是这样发现的。 是的,我在 IntelliJ 中注意到了同样的情况,只是想知道为什么它不在文档中 @Charles Smith:它位于 Web element 的子部分 “获取元素文本”(在页面底部)。有六种不同的语言,默认为 javascript。点击“Python”查看Python代码示例。【参考方案3】:

答案是:

driver.find_element_by_class_name("ctsymbol").text

【讨论】:

【参考方案4】:

要打印文本my text,您可以使用以下任一Locator Strategies:

使用class_nameget_attribute("textContent")

print(driver.find_element(By.CLASS_NAME, "current-stage").get_attribute("textContent"))

使用css_selectorget_attribute("innerHTML")

print(driver.find_element(By.CSS_SELECTOR, "span.current-stage").get_attribute("innerHTML"))

使用xpathtext 属性:

print(driver.find_element(By.XPATH, "//span[@class='current-stage']").text)

理想情况下,您需要为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies:

使用CLASS_NAMEget_attribute("textContent")

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CLASS_NAME, "current-stage"))).get_attribute("textContent"))

使用CSS_SELECTORtext属性:

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.current-stage"))).text)

使用XPATHget_attribute("innerHTML")

print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[@class='current-stage']"))).get_attribute("innerHTML"))

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

您可以在How to retrieve the text of a WebElement using Selenium - Python找到相关讨论


参考文献

链接到有用的文档:

get_attribute() 方法Gets the given attribute or property of the element. text 属性返回 The text of the element. Difference between text and innerHTML using Selenium

【讨论】:

【参考方案5】:

你可以使用:

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

这将返回元素内的文本,并允许您在此之后对其进行验证。

【讨论】:

【参考方案6】:

这是正确的答案。成功了!!

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)

【讨论】:

【参考方案7】:

当无法在自定义类中获取某些内容或更改 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

【讨论】:

你能解释一下为什么它绝对是无价的吗? 为什么需要.click()?为什么.text会有三行? 问题说“请注意我不想使用XPath”.

以上是关于如何在 Python 中使用 Selenium WebDriver 获取文本的主要内容,如果未能解决你的问题,请参考以下文章

等待页面重定向 Selenium WebDriver (Python)

Python 使用selenium技术对Excel文件进行读写

Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

如何在 Python 中使用 Selenium?

如何使用 python 和 Selenium 将 cookie 保存在浏览器中