赞
踩
注意:selenium新版元素定位需要导入方法By,使用By来调用元素定位方法
from selenium.webdriver.common.by import By
标签的 id属性具有唯一性,就像人的身份证,不存在根据一个id属性定位到多个标签的情况。假设有个iframe标签如下,其 id 属性值为"actionFrame"。
<iframe name="actionFrame" id="actionFrame" border="0" style="display:none;">
我们可以通过 id 属性值定位到这个标签。由于 id 的唯一性,我们可以不用管其他的标签的内容。
- from selenium import webdriver
- from selenium.webdriver.common.by import By
-
- url = 'https://www.chinagwy.org/html/stzx/202301/7_557715.html'
- driver = webdriver.Chrome() #打开浏览器
- driver.get(url) # 打开网址
-
- driver.find_element(By.ID, "actionFrame")
name 指定标签的名称,在页面中可以不唯一。假设有个 input 标签如下,其 name 属性值为"major"。
<input id="major" value="专业" name="major">
我们可以使用driver.find_element(By.NAME, 'major')来定位这个标签。
- from selenium import webdriver
- from selenium.webdriver.common.by import By
-
- url = 'https://www.chinagwy.org/html/stzx/202301/7_557715.html'
- driver = webdriver.Chrome() #打开浏览器
- driver.get(url) # 打开网址
-
- driver.find_element(By.NAME, 'major')
注意:用 name 方式定位需要保证 name 属性值唯一,否则定位会失败,即定位到的元素不一定是你想要定位的元素。如果name 属性值不唯一,可以用driver.find_elements方式定位,找到所有与name 属性值对应的标签,得到的将是一个包含所有与name属性值对应的标签的列表。如:
- from selenium import webdriver
- from selenium.webdriver.common.by import By
-
- url = 'https://www.baidu.com/index.php?tn=98010089_dg&ch=28'
- driver = webdriver.Chrome() #打开浏览器
- driver.get(url) # 打开网址
- #找到name属性值为tj_settingicon的所有标签
- xpath = driver.find_elements(By.NAME, 'tj_settingicon')
-
- type(xpath) #返回结果的类型
- len(xpath) #列表长度
class 属性值指定标签的类名,在页面中可以不唯一。假设有个 div 标签如下,其 class 属性值为"toolbar-search-container"。
<div class="toolbar-search-container">
我们可以使用 driver.find_element(By.CLASS_NAME, 'toolbar-search-container') 定位到 div 标签。同样,用 CLASS_NAME方式定位需要保证 class属性值唯一,否则定位会失败。
tag_name 定位即通过标签名定位。每个标签往往用来定义一类功能,所以通过 tag_name 来识别某个元素的成功率很低,每个页面一般都用很多相同的 tag 。假设有个 div 标签如下,其标签名即为div。
<div class="toolbar-search-container">
我们可以使用 driver.find_element(By.TAG_NAME, 'div ')定位到 div 标签。
前三种方式:ID属性值定位、name 属性值定位、class name 属性值定位,均是根据元素(标签)的属性值定位,而第四种tag_name 定位则是根据标签名定位。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。