array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 《Python+selenium》自动化八大元素定位方法 - 爱码网

注:寻找元素必须找到这个元素的唯一定位,否则达不到预期效果,一般来说最有效的为xpath、css定位,ID属性有时候会出现动态ID不好定位,class、name元素属性会出现多个相同的值定位不准确

素材地址百度网站:www.baidu.com

本文使用到的方法:
send_keys(value):输入方法,将value代替为你想输入的值

click():点击方法,可对定位到的元素进行点击事件

定位之前代码:

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()

driver.implicitly_wait(10)

driver.get(‘www.baidu.com’)

No.1:元素ID定位

函数:find_element_by_id(self,value)
示例:定位百度的输入框,方法:鼠标悬浮在输入框上,右击点击检查

定位到该元素并输入文字:driver.find_element_by_id(‘kw’).sned_keys(‘python自动化’)

No.2:元素name定位

还是百度的输入框:

driver.find_element_by_name(‘wd’).send_keys(‘python自动化’)

No.3:元素class定位:

依然为百度输入框:

driver.find_element_by_class_name(‘s_ipt’).send_keys(‘python自动化’)

No.4:元素Tag定位:

百度输入框为input标签,所以写法为:
driver.find_element_by_tag_name(‘input’).sned_keys(‘python自动化’)

No.5:元素link_text定位:

定位并点击新闻:
driver.find_element_by_link_text(‘新闻’).click()

No.6:元素Partial Link定位:

link_text与partial_link_text定位的区别:

link_text:需要输入全部的文字链接内容,“新闻”
partial_link_text:只需要输入部分文字链接内容,“新”

driver.find_element_by_partial_link_text(‘新’).click()

No.7:元素xpath定位:

xpath是一种通过路径定位的语言,路径分为绝对路径和相对路径

绝对路径:国家/城市/区/街道/小区/门牌号
相对路径:A相对B的位置,以B为起点来找A

还是以百度输入框为例:

a、绝对路径获取元素

driver.find_element_by_xpath(’/html/body/div/div/div[5]/div/div/form/span/input’)
b、通过索引来获取元素,匹配span标签下的input标签

driver.find_element_by_xpath(’//span/input’)
c、获取百度文字链接中更多按钮

注:last()函数获取都是指定元素最后的索引号
last()-1:表示倒数第二个元素

driver.find_element_by_xpath(’//div[last()]/a’)
d、通过元素属性值进行定位新闻

driver.find_element_by_xpath(’//a[@href=‘http://news.baidu.com’]’)

driver.find_element_by_xpath(’//div[@id=‘s-top-left’]/a[@href=‘http://news.baidu.com’]’)
e:模糊匹配(在测试中经常会碰见一些元素属性是动态生成的,每次访问的属性值都会不一样,这类元素定位难度极大,假如该类元素中有一部分元素内容保持不变则可以使用模糊匹配)
starts-with(str1,str2):查找属性str1的属性值为str2关键字开始的页面元素
driver.find_element_find_by_xpath(’//a[starts-with(@href,‘http://news’)]’)
含即可无需考虑位置
driver.find_element_by_xpath(’//a[contains(@href,‘http://news’)]’)
f:通过text()函数获取元素文本并定位元素

driver.find_element_by_xpath(’//a[contains(text(),‘新闻’)]’)
driver.find_element_by_xpath(’//a[contains(.,‘新闻’)]’)

定位新闻的上一级

driver.find_element_by_xpath(’//a[contains(.,‘地图’)]/…’)

谷歌便捷获取xpath

将鼠标放在元素属性上,然后移动到copy,再点击copy xpath即可获取谷歌提供的xpath定位,当谷歌提供的定位在代码实际运行中不准确时,需要自己手动编写xpath定位

No.8:元素CSS定位:

定位百度一下按钮:
driver.find_element_by_css_selector(’#su’)

css定位可以在元素上右击,然后copy–>copy selector

By方法定位:

Find_element(By.ID,“value”)

Find_element(By.NAME,“value”)
Find_element(By.CLASS_NAME,“value”)
Find_element(By.TAG_NAME,“value”)
Find_element(By.LINK_TEXT,“link text”)
Find_element(By.PARTIAL_LINK_TEXT,“partial link text”)
Find_element(By.XPATH,“xpath”)
Find_element(By.CSS_SELECTOR,“selector”)

《Python+selenium》自动化八大元素定位方法扫描二维码
获取更多精彩

相关文章: