[Python3 爬虫学习笔记]Selenium使用详解 2 -- 查找元素

在一个页面中有很多不同的策略可以定位一个元素。在项目中,你可以选择最很是的方法查找元素。Selenium提供了下列的方法:

  • find_element_by_id

  • find_element_by_name

  • find_element_by_xpath

  • find_element_by_link_text

  • find_element_by_partial_link_text

  • find_element_by_tag_name

  • find_element_by_class_name

  • find_element_by_css_selector
    一次查找多个元素(这些方法会返回一个list列表):

  • find_elements_by_name

  • find_elements_by_xpath

  • find_elements_by_link_text

  • find_elements_by_partial_link_text

  • find_elements_by_tag_name

  • find_elements_by_class_name

  • find_elements_by_css_selector
    除了上述的公共方法,下面还有两个私有方法,在查找页面元素的时候也许有用。分别是find_element和find_elements。

用法示例:

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')

下面是By类的一些可用属性:

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK = "partial link text"
NAME = "name"
TAG_NAME = "tag_name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

通过ID查找元素

当你知道一个元素的id时,你可以使用本方法。在该策略下,页面中第一个id元素会被匹配并返回。如果找不到任何元素,会抛出’NoSuchElementException’异常。
作为示例,页面元素如下所示:

<html>
	<body>
		<form id="loginForm">
			<input name="username" type="text" />
			<input name="password" type="password" />
			<input name="continue" type="submit" value="Login" />
		</form>
	</body>
</html>

可以这样查找表单(form)元素:

login_form = driver.find_element_by_id('loginForm')

通过Name查找元素

username = driver.find_element_by_name('username')

通过XPath查找元素

Xpath是XML文档中查找节点的语法。因为HTML文档也可以被转换成XML(XHTML)文档,Selenium的用户可以利用这种强大的语言在web应用中查找元素。XPath扩展了这种通过id或name属性获取元素的简单方式,同时也开辟了各种信的可能性,例如获取页面上的第三个复选框。
使用XPath的主要原因之一就是当你想获取一个既没有id属性也没有name属性的元素时,你可以通过XPath使用元素的绝对位置来获取他,或相对于有一个id或name属性的元素的来获取你想要的元素。XPath定位器也可以通过非id和name属性查找元素。

<html>
	<body>
		<form id="loginForm">
			<input name="username" type="text" />
			<input name="password" type="password" />
			<input name="continue" type="submit" value="Login" />
			<input name="continue" type="button" value="Clear" />
		</form>
	</body>
</html>

可以这样查找表单(form)元素:

login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

1.绝对定位(页面结构轻微调整就会被破坏)
2.HTML页面中的第一个form元素
3.包含id属性并且其值为loginForm的form元素

username元素可以如下获取:

username = driver.find_element_by_xpath("//form[input/@name='username']")
username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
username = driver.find_element_by_xpath("//input[@name='username']")

1.第一个form元素中包含name属性并且其值为username的input
2.id为loginForm的form元素的第一个input子元素
3.第一个name属性为username的input元素

"Clear"按钮可以如下获取:

clear_button = driver.find_element_by_xpath("//input[@name='continue'][@type='button']")
clear_button = driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")

通过链接文本获取超链接

当你直到在一个锚标签中使用的链接文本时使用这个。在该策略下,页面中第一个匹配链接内容锚标签会被匹配并返回。如果找不到任何元素,会抛出NoSuchElementException异常。
示例如下:

<html>
	<body>
		<p>Are you sure you want to do this?</p>
		<a href="continue.html">Continue</a>
		<a href="cancel.html">Cancel</a>
	</body>
</html>

continue.html超链接可以被这样查找到:

continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')

通过标签名查找元素

当你想通过标签名查找元素时使用这个。在该策略下,页面中第一个匹配该标签的元素会被匹配并返回。如果找不到任何元素,会抛出NoSuchElementException异常。
示例如下:

<html>
	<body>
		<h1>Welcome</h1>
		<p>Site content goes here.</p>
	</body>
</html>

h1元素可以如下查找:

heading1 = driver.find_element_by_tag_name('h1')

通过Class name定位元素

示例如下:

<html>
	<body>
		<p class="content">Site content goes here.</p>
	</body>
</html>

p元素可以如下查找:

content = driver.find_element_by_class_name('content')

通过CSS选择器查找元素

示例如下:

<html>
	<body>
		<p class="content">Site content goes here.</p>
	</body>
</html>

p元素可以如下查找:

content = driver.find_element_by_css_selector('p.content')

猜你喜欢

转载自blog.csdn.net/htsait4113/article/details/84326269