在网络刮擦或自动化的时候,我们需要从页面的HTML元素中获取文本。Selenium允许我们通过一个特殊的 ".text()"方法来实现这一目标。这个方法可以帮助我们把HTML内容中可见的文本带出来。今天我们将深入研究,以便更好地理解这一功能。
设置环境
所以,让我们开始这个过程。WebDriver 模块需要从selenium 中导入,然后从中创建一个驱动对象。接下来,我们需要指定chromedriver 的路径,因为我们将使用chrome浏览器来滚动页面。maximize_window() 的方法,以便有一个更好的视野。然后尝试使用driver.get() 方法连接到网站。我们将使用隐式等待10秒。
from selenium import webdriver
driver = webdriver.Chrome(executable_path = r'G:/chromedriver_win32/chromedriver.exe')
driver.maximize_window()
driver.get('https://theautomationzone.blogspot.com/2020/07/mix-of-basic-webelements.html')
driver.implicitly_wait(10)
用.text()查找网站的标题文本
我们将尝试从""中找到标题文本。自动化区"博客中找到标题文本。首先,我们需要找到这个元素,然后我们将使用Python selenium的text方法来获取标题的文本。把鼠标指针放在网页内,右键点击鼠标。从上下文菜单中点击检查选项。

从html中,我们可以使用class属性来寻找元素,然后应用*".text*"方法来获得标题文本。我们现在将创建一个 "*title "*变量,并将找到的网页元素用text方法存储在其中。
title = driver.find_element_by_class_name('title').text
print(title)
标题文本 "the automation zone "将被打印在控制台。
如何用get_attribute()获取文本
在Selenium中还有一个方法,叫做get_attribute() 方法,它也允许我们从html中获取文本。该方法get_attribute() 可以接受像 "textContent", "value", "innerHtml"这样的参数。例如,我们想获得第三段的文本。我们可以用下面的代码得到它。

paragraph3 = driver.find_element_by_id('p3').get_attribute("textContent")
print(paragraph3)
这里,在定位了webelement之后,我们使用get_attribute(“textContent”) 方法来获取文本。结果会是这样的。
This is an example of paragraphs with a span inside
.text()和get_attribute()的区别
注意上面第3段的输出文本。它看起来与网页上可见的文本不一样。短语之间有一些空隙。这是因为HTML标签内有一个 "span"属性,我们得到的是写在HTML上的一行一行的代码文本。它不会返回HTML元素标签内可用的空位或换行。
现在,如果我们尝试使用 ".text" 方法获得第三段的相同文本。
para3 = driver.find_element_by_id('p3').text
print(para3)
输出结果将是:
This is an example of paragraphs with a span inside
我们可以看到,输出的文本与网页上写的一样。它忽略了HTML文件中的空格。
所以主要的区别是,get_attribute() 方法将返回写在HTML上的相同文本,而".text" 方法将复制写在网页上的相同文本。
如何获得一个URL的文本
get_attribute() 方法不仅允许我们从元素中取出文本,而且还能使我们获得写在元素标签属性中的文本。例如,我们需要在网页的*"这是一个链接的例子 "*部分找到所附的链接。

通过检查网页中谷歌链接部分的HTML,我们可以看到URL是在<a> 标签的href 属性里面。我们可以使用get_attribute("value") 方法来获取href 的值。
link = driver.find_element_by_id('link').get_attribute('href')
print(link)
此后通过id定位元素,我们在get_attribute() 方法中使用'href',因为它包含谷歌链接的URL。它以纯文本形式返回输出 。
https://www.google.com/
这是一个非常有用的方法,可以获得HTML标签内属性的文本值。
如何从一个下拉菜单中获取文本
让我们尝试将 "选择你最喜欢的食物 "下拉菜单设置为 "菠萝",并从中获取文本 "菠萝"。如果我们通过右击该元素进行检查,我们会发现 "菠萝 "选项在select 标签下可用。

我们需要导入Select 模块,代码将如下,以获得文本"Pineapple"。
dropdown = driver.find_element_by_id("mySelect")
dropdown.click()
element = Select(dropdown)
element.select_by_index('2')
fruit = driver.find_element_by_id("mySelect").get_attribute("value")
print(fruit)
在这里,我们首先定位元素,然后在 "Select()*"*方法的帮助下,从下拉菜单中选择 "pineapple"值。最后,我们用 "get_attribute(“value”) "方法将文本 "pineapple "从其中取出。
这就是关于如何用Python中的Selenium获取文本的全部内容。