此处定位不到是因为元素写错了,所以这也是初学者最容易放的错误。首先要检查的就是这个问题。其次,我们可以看控制台错误警告:
![](https://img-blog.csdnimg.cn/20211001105912439.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
看到这个错误就应该知道是元素错误了。正确的应该是:
from selenium import webdriver
fox = webdriver.Firefox()
fox.get(“https://www.baidu.com”)
fox.find_element_by_id(“kw”).send_keys(‘清安’)
fox.quit()
---
## 未切换句柄
切换句柄是什么意思呢。就是你从百度搜索到下面例子的京东界面,浏览器中打开了两个网页,你需要从百度的界面跳转到这么界面。如下:
![](https://img-blog.csdnimg.cn/20211001114229351.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
这里元素定位输入框是id=key但是你会发现定位不到。
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[1]/div/div/div[1]/div/div[1]/div/h2/a[1]/em’).click()
sleep(2)
fox.find_element_by_id(‘key’).send_keys(‘python’)
fox.quit()
![](https://img-blog.csdnimg.cn/20211001114426287.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
所以你需要切换句柄,怎么操作呢?看代码
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[1]/div/div/div[1]/div/div[1]/div/h2/a[1]/em’).click()
sleep(2)
获取当前句柄
ele = fox.current_window_handle
print(f"当前句柄是:{ele}“)
#获取所有句柄
ele_all = fox.window_handles
print(f"所有句柄号:{ele_all}”)
切换句柄号
fox.switch_to.window(ele_all[-1])
fox.find_element_by_id(‘key’).send_keys(‘python’)
fox.quit()
切花句柄为什么我写的是-1,因为我想去最后一个句柄,你也可以看打印出来的句柄号是什么,直接指定切换即可。写法:fox.switch\_to.window('123456')。
句柄号截图我就不摆出来了,浏览器不一样,句柄号格式不一样。
---
## 超链接
超链接<a>标签,很多人在不注意的时候一股脑的就猛的定位,然后定位不到了就疯狂的找原因改其他的标签定位。看例子
![](https://img-blog.csdnimg.cn/20211001113134125.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
注意:这里明确告诉你超链接不能直接定位,但是可以告诉你的是,超链接不能直接定位难道辅助定位还不行吗。
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空间等登录界面都会看到,我们看图:
![](https://img-blog.csdnimg.cn/20211001115429837.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
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()
看到此处代码,如果你想直接去定位,得到的就是:
![](https://img-blog.csdnimg.cn/20211001120023388.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
所以此处我们需要想切换句柄一样去切换到这个标签上去!
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(),所以不要慌。
## 隐藏标签-元素
在实际的项目中,你是否遇到了有隐藏元素或隐藏标签的情况。今天就来举例一个这种情况,以及解决办法。先看两张图:
![](https://img-blog.csdnimg.cn/20211001124353174.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/20211001124411331.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
上面两张图,后者是因为点击了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()
![](https://img-blog.csdnimg.cn/20211001133711928.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
这里因为是实际的项目,所以还不能公布。见谅!这里提供一定的解决办法。这里之所以定位不到是因为点击图标的时候隐藏的输入框才会显现。待你再次点击其他地方的时候就会再次隐藏掉。所以个人拙见,这类操作不符合selenium的一种写法操作。
对于这类的情况,本人能力有限。只能准备了两种解决办法。一种是JS一种是鼠标操作。一起看看吧:
### **鼠标操作:**
鼠标操作前面出过文,不清楚的可以去看看,下面的鼠标操作处结合这张图看:
![](https://img-blog.csdnimg.cn/20211001144938841.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5riF5a6J5peg5Yir5LqL,size_20,color_FFFFFF,t_70,g_se,x_16)
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)
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
2️⃣视频配套工具&国内外网安书籍、文档
① 工具
② 视频
③ 书籍
资源较为敏感,未展示全面,需要的最下面获取
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!