web界面自动化,要操控元素,首先需要 选择界面元素 ,或者说 定位界面元素
就是 先告诉浏览器,你要操作 哪个
界面元素, 让它找到你要操作的界面元素。
我们必须要让浏览器 先找到元素,然后才能操作元素。
一、选择元素
对于web自动化,就要明确知道你要操作的页面元素是什么,并且要知道它的特征
那么如何具体知道你所要操作的元素的特征?
这里我们可以使用浏览器的 开发者选项 帮我们查看、选择 web 元素。
以Chrom浏览器为例,通过Chrom进入百度,按F12后,点击下图箭头处的标签之后,鼠标在界面上点击哪个元素,就可以查看 该元素对应的html标签 了
以搜索框为例,我们点击上图所示箭头后点击搜索文本框,高亮部分就是我们要寻找的元素
(二)定位方法
知道了web自动化要操作的元素特征之后,我们要对它进行操作,webdriver的api为我们提供了一系列的对象定位方法
对于属性只有唯一值的,我们一般可以采用
find_element_by_xxx方法
这里同样以百度为例它的id name css xpath的绝对路径是没有和它相同的,link text partial link text tag name我们现在暂时不使用
#实例化对象并且自动打开浏览器进入百度 from time import sleep from selenium import webdriver wd=webdriver.Chrome(r‘d:\Web自动化\chromedriver.exe‘) wd.get("https://www.baidu.com") #接下来开始通过各种方式定位百度搜索文本框 #为了效果明显这里我们暂时给它传一个值‘夏’ #由id定位 wd.find_element_by_id(‘kw‘).send_keys(‘夏‘) # #通过name定位 wd.find_element_by_name(‘wd‘).send_keys(‘夏‘) #通过CSS方式定位 wd.find_element_by_css_selector("#kw").send_keys(‘夏‘) #通过xphan方式定位 wd.find_element_by_xpath("//input[@id=‘kw‘]").send_keys(‘夏‘) #睡眠2秒 sleep(2) #自动关闭浏览器 wd.quit()
运行以上代码得到结果,很容易知道我们以上代码四个定位都已经成功,并且给它传值:
id、name
id 和 name 是我们最最常用的定位方式,因为大多数控件都有这两个属性,而且在对控件的id 和name命名时一般使其有意义也会取不同的名字。
一般我们可以很轻松的通过id和name地位到元素,以上代码中
id=”kw”
我们通过find_element_by_id("kw").send_keys(‘夏‘)函数就是捕获到百度输入框并且传值
name=”wd”
我们通过find_element_by_name("wd").send_keys(‘夏‘)函数就是捕获到百度输入框并且传值
class_name tag_name
这里通过开发者工具我们可以知道它的class是唯一的
class="s_ipt"
我们通过wd.find_element_by_class_name(‘s_ipt‘).send_keys(‘夏‘)函数就是捕获到百度输入框并且传值
tag name(标签名)
这里我们要捕获的标签为<input>,但是通过开发者工具我们很容易发现,百度页面不仅只有一个<input>
这时候我们就不能通过tag_name定位了
CSS选择器
前面我们看到了根据 id、class属性、tag名 选择元素。
如果我们要选择的 元素 没有id、class 属性,或者有些我们不想选择的元素 也有相同的 id、class属性值,怎么办呢?
这时候我们通常可以通过 CSS selector 语法选择元素
它的基本语法find_elements_by_css_selector()
css选择器的功能非常强大
CSS Selector 同样可以根据tag名、id 属性和 class属性 来 选择元素,
如果通过id,我们需要在id值前面加一个"#"号表示我们要通过id定位,通过class定位同样的我们要加一个“.”
假如我们有
<input type="text" id=‘searchtext‘ />
我们可以通过
wd.find_elements_by_css_selector(‘#searchtext‘)来定位它
根据 tag名 选择元素的 CSS Selector 语法非常简单,直接写上tag名即可,
比如 要选择 所有的tag名为div的元素,就可以是这样
lements = wd.find_elements_by_css_selector(‘div‘)
等价于
elements = wd.find_elements_by_tag_name(‘div‘)
css选择器的功能非常强大,有兴趣可以去看看官方api学习学习
原文:https://www.cnblogs.com/xxxyang/p/11832892.html