元素定位的方式
上一节已经可以成功的让浏览器跑起来,但只是简单的打开一个百度网址,那现在就真正的模拟一个用户去操作浏览器。
在selenium中一直有八大定位方式,分别是:
id,
name,
class_name,
tag_name,
link_text,
partial_link_text,
css_selector,
xpath
通过id定位
上图是百度首页,我们通过百度首页来介绍这八种定位方式。
首先我们需要打开浏览器的开发者工具或这直接按F12,之后我们就可以看到前端的代码(定位的根本)。
现在我们要定位到输入框,前端代码已经用黑色框标记出来。
<input type=“text” class=“s_ipt” name=“wd” id=“kw” maxlength=“100” autocomplete=“off”>
这里面我们可以看到有个id标签,且id=‘kw’。这个【kw】就是我们想要通过id的方式定位所需要的值。我们使用webdriver里面的方法【find_element_by_id】
selenium的写法如下:
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw')
这样我们就可以定位到这个输入框,定位到之后需要向输入框输入数据,我们只需要跟在后面加上一个方法【send_keys()】就可以了。括号内要传入你要输入的值作为参数。
driver.find_element_by_id('kw').send_keys('selenium')
为什么要用send_keys?
我们打印一下find_element_by_id得到的是什么。
从打印中我们可以看出【find_element_by_id】返回的是一个【WebElement】类型,也就是说通过这个方法我们是定位到元素,但是并没有对元素进行任何的操作,后面的send_keys才是真正的驱使浏览器对元素进行操作,**后面很多操作我们都是先定位元素再对元素进行操作。所以我们学习selenium的两大步就是【定位元素】以及【操作元素】。
通过name定位
<input type=“text” class=“s_ipt” name=“wd” id=“kw” maxlength=“100” autocomplete=“off”>
看回这个input标签,我们发现除了id这个属性之外还有一个name的属性,我们定位一个元素可以用多种方法,name也是其中一种。直接上代码!
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
driver.find_element_by_name('wd')
实现个小动作,在百度搜索【selenium】
分析:
实现这个小动作需要两步
1、输入框输入【selenium】
2、点击【百度一下】按钮
我们使用id跟那么两种方法实现,另外介绍一个元素的操作方法**【click()】**,中文意思就是点击,括号内不用放参数。
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
driver.find_element_by_name('wd').send_keys('selenium')
driver.find_element_by_id('su').click()
为什么【百度一下】的id是【su】,这个就自己找一找哈。顺便吐槽一句,百度的广告真多。。。
最后介绍一下怎么记住定位的方法,之前有人跟我吐槽说方法名字长不好记,其实很简单。
find_element_by_id
查找_元素_通过_id
完事!