目录
1、id定位
2、name定位
3、class定位
(1)单值时class定位
(2)复合型class定位
接下来主要详细说下各个元素定位的具体使用方法,这次先说下id&name&class的定位方法。
先了解下id属性,selenium中的定位方式,都是用的html中各种的属性去进行定位的,id属性在html中的官方解释为:id 属性规定 HTML 元素的唯一的 id;id 在 HTML 文档中必须是唯一的;id 属性可用作链接锚(link anchor),通过 JavaScript(HTML DOM)或通过 CSS 为带有指定 id 的元素改变或添加样式。简单理解就是在html中,id元素只能是唯一的,可以理解成身份证号码,每个人从诞生之后就会有身份证号码,且每个身份证号码有且只能有一个。
id定位的具体用法:
find_element_by_id("元素id") #急着要写在双引号中
当我们定位到输入框时,发现其id="kw",且该id是唯一的,这是我们想定位输入框就可以使用id定位了。
from selenium import webdriver #导入selenium模块的webdriver
driver = webdriver.Chrome() #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com") #打开百度浏览器
driver.find_element_by_id("kw").send_keys("放假安排") #定位到输入框,然后输入框输入 放假安排
定位到输入框后,就可以输入框进行输入、清除等操作了。
name在HTML中常常是用来指元素的名称的,很多时候name并不是唯一的,在一个HTML中可能同时存在有多个name,name可以理解为人的姓名,在这个世界上可能有好多个人和你姓名相同,也有可能你的姓名就是唯一的,所以如果选择使用name来进行定位的话,一定要确保其唯一性。
name定位的具体用法:
find_element_by_name("name的名称") #记着要写在双引号中
还是输入框,这里发现输入框也有name的定位,且该元素也是唯一的,所以输入框除了用id定位外,也可以使用name进行定位。
from selenium import webdriver #导入selenium模块的webdriver
driver = webdriver.Chrome() #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com") #打开百度浏览器
driver.find_element_by_name("wd").send_keys("放假安排") #定位到输入框,然后输入框输入 放假安排
calss在HTML中的属性是定义元素的类名,规定元素的类的名称,如需为一个元素规定多个类,用空格分隔类名,也就是说一个class下可能包含多个类。在使用class定位时也可能出现多个元素用的是同一个class的情况,所以在使用class定位时也要确定好其元素的唯一性。
calss定位的具体用法:
find_element_by_class_name("class_name的名称") #记着要写在双引号中
这里还使用输入框举例子,定位到输入框时,发现其class是唯一的 ,所以这里还是用输入框做例子,先说下class下只有一个值的情况。
from selenium import webdriver #导入selenium模块的webdriver
driver = webdriver.Chrome() #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com") #打开百度浏览器
driver.find_element_by_class_name("s_ipt").send_keys("放假安排") #定位到输入框,然后输入框输入 放假安排
一般当class中有多个值用空格隔开时,我们称其为复合型class,我们如果想对其定位,不能直接复制其所有的值的,我们需要做的是选择其中一个且该值在页面上也是唯一的。(如果想一次性同时定位这几个值,我们需要用到css、xpath定位方式才行,这里就不多介绍了,只说下使用class的方式去如何定位)
这个定位到百度一下的按钮时,会发现其class中有两个值,分别是"bg"和"s_btn",这时候我们选择其中一个值即可,通过搜索发现s_btn这个值是唯一的,所以选择使用s_btn即可。
首先看下当带着空格输入两个值时会发生什么。
from selenium import webdriver #导入selenium模块的webdriver
driver = webdriver.Chrome() #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com") #打开百度浏览器
driver.find_element_by_class_name("s_ipt").send_keys("放假安排") #定位到输入框,然后输入框输入 放假安排
driver.find_element_by_class_name("bg s_btn").click() #定位到百度一下按钮然后进行点击操作
从截图中可以看到,当输入两个值时,程序会发生报错。
最后,再试下仅使用s_btn进行定位。
from selenium import webdriver #导入selenium模块的webdriver
driver = webdriver.Chrome() #webdriver.Chrome()是启动谷歌浏览器然后定义成变量driver
driver.get("https://www.baidu.com") #打开百度浏览器
driver.find_element_by_class_name("s_ipt").send_keys("放假安排") #定位到输入框,然后输入框输入 放假安排
driver.find_element_by_class_name("s_btn").click() #定位到百度一下按钮然后进行点击操作
这样写发现代码可以正常运行成功,并按着书写流程页面进行了对应的操作。
Tips:在定位到输入框后,加上输入内容,是为了能方便在页面上看到是否成功定位到了,如果能定位到程序不会报错,并且输入框会输入“放假安排”这几个字的,代表这个代码和定位方式是没问题的,代码最后没有加driver.quit() #关闭浏览器,也是为了能在输入完成后,停留在该页面,方便查看是否运行成功,一般情况下最后记着 加上driver.quit() #关闭浏览器。
如果大家在使用过程中遇到了问题,可以在文章下留言,或者关注公众号:刘阿童木的进化记录,进行留言
下图为公众号二维码,内容会同步发出,大家可以关注一起学习!