用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')
让我们来理解上面的代码。
- 我们首先导入
webdriver
类来创建自动化的浏览器。在我们的案例中,我们将使用Google Chrome浏览器的chromedriver.exe
。 - 我们使用
get()
函数来检索我们希望获得元素的网站。 - 为了获得元素列表,我们使用
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]")
使用find_elements_by_link_text()
函数在Python中用Selenium查找元素
我们在文档中有一些元素可以重定向到其他网页。这是用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')
使用find_elements_by_partial_link_text()
函数在Python中用Selenium查找元素
这个函数与前一个函数类似。不同的是,它返回与链接的部分文本相匹配的元素。
比如说、
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
。