selenium--面试官问元素定位不到怎么办?工作中还在为元素定位不到而烦恼?看这一文就够了--内附解析跟代码解决案例!让面试官对你刮目相看_怎么处理难定位的元素

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

超链接标签,很多人在不注意的时候一股脑的就猛的定位,然后定位不到了就疯狂的找原因改其他的标签定位。看例子

注意:这里明确告诉你超链接不能直接定位,但是可以告诉你的是,超链接不能直接定位难道辅助定位还不行吗。

from time import sleep
from selenium import webdriver

fox = webdriver.Firefox()
fox.get("https://www.baidu.com")
fox.find_element_by_id("kw").send_keys('清安无别事')
fox.find_element_by_id("su").click()
fox.find_element_by_xpath('/html/body/div[1]/div[4]/div[1]/div[3]/div[3]/h3/a/em').click()
sleep(2)
fox.quit()

这里举例我想定位2021年01月_清欢无别事_这条超链接内容并点击,那么这里你就用xpath定位,定位到红色字体的清安无别事。如果你要问为什么,那就是那里有一个em标签,你想定位红色字体以外的你想定位的超链接是定位不到的。很多时候你可以看到超链接里面放入了id,name等元素,你可以依靠这些进行定位。

这里还需要注意的就是,想这种随着时间的更新页面会发生变化的,xpath是不准的,所以需要自己维护。


iframe标签

这个标签通常在登录的时候会看到,像知乎,QQ空间等登录界面都会看到,我们看图:

iframe标签里面可以嵌套一个HTML网页,所以,定位不到的时候记得看看是不是也有这个原因。

from selenium import webdriver

fox = webdriver.Firefox()
fox.get("https://qzone.qq.com/")
fox.find_element_by_id('switcher_plogin').click()
fox.find_element_by_id('u').send_keys('清安无别事')
fox.find_element_by_id('p').send_keys('欢迎入坑')

fox.quit()

看到此处代码,如果你想直接去定位,得到的就是:

所以此处我们需要想切换句柄一样去切换到这个标签上去!

from selenium import webdriver

fox = webdriver.Firefox()
fox.get("https://qzone.qq.com/")
# 定位标签
ifranme = fox.find_element_by_id('login_frame')
# 切换到标签上
fox.switch_to.frame(ifranme)
fox.find_element_by_id('switcher_plogin').click()
fox.find_element_by_id('u').send_keys('清安无别事')
fox.find_element_by_id('p').send_keys('欢迎入坑')

fox.quit()

此处是有id有那么的情况,如果没有这些呢,我们也可以用标签名来进行定位fox.find_element_by_tag_name(),所以不要慌。

隐藏标签-元素

在实际的项目中,你是否遇到了有隐藏元素或隐藏标签的情况。今天就来举例一个这种情况,以及解决办法。先看两张图:

上面两张图,后者是因为点击了dd右边的图标才显示的元素,遇到这样的情况你会怎么办?

是不是首先想到的就是先点击图标再去定位输入框,输入字符?我们来看看代码。

from time import sleep
from selenium import webdriver

fox = webdriver.Firefox()
fox.get("https://xxxxxxxx/account/basic")
fox.find_element_by_id('fm-login-id').send_keys('清安无别事')
fox.find_element_by_class_name('ivu-input.ivu-input-default.ivu-input-with-suffix').send_keys('qing_an_an')
fox.find_element_by_class_name('fm-button').click()
sleep(3)
# 定位图标
fox.find_element_by_class_name('basic-login-img').click()
# 定位输入框更改字符
fox.find_element_by_class_name('ivu-imput-wrapper.ivu-input-wrapper-default.ivu-input-type.isRead').send_keys('清安')
fox.quit()

这里因为是实际的项目,所以还不能公布。见谅!这里提供一定的解决办法。这里之所以定位不到是因为点击图标的时候隐藏的输入框才会显现。待你再次点击其他地方的时候就会再次隐藏掉。所以个人拙见,这类操作不符合selenium的一种写法操作。

对于这类的情况,本人能力有限。只能准备了两种解决办法。一种是JS一种是鼠标操作。一起看看吧:

鼠标操作:

鼠标操作前面出过文,不清楚的可以去看看,下面的鼠标操作处结合这张图看:

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

fox = webdriver.Firefox()
fox.get("https://www.kameymall.com/account/personal/basic")
fox.find_element_by_id('fm-login-id').send_keys('1084460197@qq.com')
fox.find_element_by_class_name('ivu-input.ivu-input-default.ivu-input-with-suffix').send_keys('88888888')
fox.find_element_by_class_name('fm-button').click()
sleep(3)
# 定位图标
fox.find_element_by_class_name('basic-login-img').click()
# 实例化鼠标操作
action = ActionChains(fox)
# 定位到输入框
ele1 = fox.find_element_by_class_name('margin')
# 鼠标点击并输入名字
action.click(ele1)
action.send_keys('清安').perform()
fox.quit()

JS操作:

这里我用的火狐,不同的浏览器复制的定位略有不同,所以你要是用的谷歌,IE只要能定位到就好,不必差异:

首先用JS去点击这个图标,点击图标后隐藏的一些列元素就会展现出来。

这里我点击跟输入值一起操作了,自己操作的时候可以一步步来:

看这,这个隐藏的input标签就显示出来了,然后我们再次去做输入的操作即可,看看完整出代码:

from time import sleep
from selenium import webdriver

fox = webdriver.Firefox()
fox.get("https://xxxxxx")
fox.find_element_by_id('fm-login-id').send_keys('100000000@qq.com')
fox.find_element_by_class_name('ivu-input.ivu-input-default.ivu-input-with-suffix').send_keys('88888888')
fox.find_element_by_class_name('fm-button').click()
sleep(3)
# 定位图标
js_res = "document.querySelector('.basic-login-img').click())"
fox.execute_script(js_res)
js_value = "document.querySelector('.ivu-input.ivu-input-default').value='清安'"
fox.execute_script(js_value)
fox.quit()

下拉框

这里最后一种情况就是下拉框的情况了,很多朋友不知道下拉框如何定位,一般定位下拉框往往需要伴随切换标签到另一个HTML页面上去。并且下拉框也需要导入一个库来使用,所以此处需要特别注意一下。

此处项目给到各位,可以自行练习。

from time import sleep
from selenium import webdriver
from selenium.webdriver.support.ui import Select

fox = webdriver.Firefox()
fox.implicitly_wait(2)
fox.get("http://shop.aircheng.com/ucenter/address")
fox.find_element_by_name('login_info').send_keys('nswe')
fox.find_element_by_name('password').send_keys('111111')
fox.find_element_by_class_name('input_submit').click()
fox.find_element_by_partial_link_text('地址管理').click()
sleep(2)
fox.find_element_by_class_name('fa.fa-map-marker').click()
# 定位标签
ifranme = fox.find_element_by_name('OpenaddressWindow')
# 切换到标签上
fox.switch_to.frame(ifranme)
sleep(3)
# 导入select标签
ele = fox.find_element_by_name('province')
Select(ele).select_by_value('440000')
ele_city = fox.find_element_by_name('city')
Select(ele_city).select_by_visible_text('深圳市')
ele_area = fox.find_element_by_name('area')
Select(ele_area).select_by_index(5)
sleep(5)
fox.quit()

一搬面试官问元素定位不到一般性指的是前几种情况,也还有元素还没加载完导致元素定位不到–需要添加等待时间,也有是因为部分控件是不支持元素定位的,比如 canvas画布控件等啧需要人工去验证了。这也恰巧说明了自动化其实不能完全代替人为测试。各位细细体会。最后这种下拉框情况是博主自己加上的。解决方法给到各位,看到这,在此也感谢各位能看完这篇文章。同时也欢迎各位留言!

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值