用Python中的Selenium查找元素

Python中的selenium包用于网络浏览器的自动化;它与几乎所有的主要浏览器兼容。我们可以用Python编写脚本,使浏览器上的一些任务自动化。

本教程将展示使用Python中的selenium查找网页中的元素的不同方法。

用Python中的Selenium查找元素

元素是一个网页的基本结构,用来定义其结构。我们可以使用Selenium的不同函数来查找元素。

这些函数用于使用不同的属性来查找元素,如name,xpath,id, 等等。我们将使用这些方法从下面的HTML文档中检索元素。

<html>
 <body>
  <p class="content">Some text</p>
  <a href="link.html"> Link_text </a>
  <form id="some_form">
   <input name="email" type="text" />
   <input name="pass" type="password" />
  </form>
</body>
</html>

注意,如果在任何情况下都没有匹配,那么就会产生一个NoSuchElementException 异常。它们都会返回一个找到匹配的元素的列表。

下面将讨论这些方法。

使用find_elements_by_name() 函数在Python中用Selenium查找元素

一个网页上的不同元素都有一个name 属性。我们可以使用find_elements_by_name() 函数来检索符合name 属性值的元素列表。

请看下面的代码。

from selenium import webdriver
driver = webdriver.Chrome(r'C:/path/to/chromedriver.exe')
driver.get("https://www.sample.org/")
e = driver.find_element_by_name('email')

让我们来理解上面的代码。

  1. 我们首先导入webdriver 类来创建自动化的浏览器。在我们的案例中,我们将使用Google Chrome浏览器的chromedriver.exe
  2. 我们使用get() 函数来检索我们希望获得元素的网站。
  3. 为了获得元素列表,我们使用find_element_by_name() 函数,并在该函数中指定name 属性的值。

请注意,下面讨论的每个方法的代码都是一样的。只有检索元素的函数(在这里是find_element_by_name() )会改变。

使用find_elements_by_id() 函数在Python中用Selenium查找元素

id 属性也可以返回一个在网页上找到的元素的列表。为此,我们可以使用find_elements_by_id() 函数。

比如说、

from selenium import webdriver
driver = webdriver.Chrome(r'C:/path/to/chromedriver.exe')
driver.get("https://www.sample.org/")
e = driver.find_element_by_id('some_form')

使用find_elements_by_xpath() 函数在Python中用Selenium查找元素

我们可以使用xpath 的路径表达式来检索文档中的节点。要使用xpath 查找元素,我们可以使用find_elements_by_xpath() 函数。

路径表达式在函数中被指定。

比如说、

from selenium import webdriver
driver = webdriver.Chrome(r'C:/path/to/chromedriver.exe')
driver.get("https://www.sample.org/")
e = driver.find_element_by_xpath("/html/body/form[1]")

我们在文档中有一些元素可以重定向到其他网页。这是用anchor 标签实现的。

使用find_elements_by_link_text() 函数,我们可以使用链接文本检索元素。

请看下面的代码。

from selenium import webdriver
driver = webdriver.Chrome(r'C:/path/to/chromedriver.exe')
driver.get("https://www.sample.org/")
e = driver.find_element_by_link_text('Link_text')

这个函数与前一个函数类似。不同的是,它返回与链接的部分文本相匹配的元素。

比如说、

from selenium import webdriver
driver = webdriver.Chrome(r'C:/path/to/chromedriver.exe')
driver.get("https://www.sample.org/")
e = driver.find_element_by_partial_link_text('Link_')

在上面的例子中,我们可以看到,我们能够通过使用部分链接文本来检索元素。

在Python中使用find_elements_by_tag_name() 函数来寻找Selenium元素

HTML文档中的每个元素都有一个标签名。为了使用标签名称查找元素,我们可以使用Python中的find_element_by_tag_name()

请看下面的代码。

from selenium import webdriver
driver = webdriver.Chrome(r'C:/path/to/chromedriver.exe')
driver.get("https://www.sample.org/")
e = driver.find_element_by_tag_name('form')

使用find_elements_by_class_name() 函数在Python中用Selenium查找元素

我们可以使用find_elements_by_class_name() 函数来检索网页上符合给定的class 属性的元素。

请看下面的代码。

from selenium import webdriver
driver = webdriver.Chrome(r'C:/path/to/chromedriver.exe')
driver.get("https://www.sample.org/")
e = driver.find_element_by_class_name('content')

使用find_elements_by_css_selector() 函数在Python中用Selenium查找元素

我们可以使用CSS选择器语法对HTML元素进行样式设计。CSS选择器语法也可以用来用find_elements_by_css_selector() 函数查找元素。

请看下面的例子。

from selenium import webdriver
driver = webdriver.Chrome(r'C:/path/to/chromedriver.exe')
driver.get("https://www.sample.org/")
e = driver.find_element_by_css_selector('p.content')

使用find_elements() 函数在Python中用Selenium查找元素

find_elements() 函数是一个私有方法,可以从HTML文档中检索元素。它就像之前讨论的所有方法的顶点。

我们可以使用之前所有的属性作为参数来寻找元素。

比如说、

from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome(r'C:/path/to/chromedriver.exe')
driver.get("https://www.sample.org/")
e = driver.find_elements(By.NAME, 'email')

上面的例子将像以前那样使用name 属性来查找元素。

总结

我们已经讨论了用Python中的selenium根据不同的属性来寻找元素的不同方法。每个属性都有它的功能。

我们也可以使用私有方法find_elements ,并提供不同的属性作为参数。另外需要注意的是,本文中的方法会返回一个所有可能匹配的元素列表。

如果我们只需要找到一个元素,我们可以在每个讨论的函数中用elements 代替element 。例如,find_elements 变成find_element