python selenium疑问总结与解答

前言

本文主要是为了记录自己在学习selenium过程中所遇到的一些问题。手头主要就是弄了一个滑动验证码的项目用到了。在之后将会自己陆续补充自己找到的解决方案。一是觉得自己可能没啥时间去翻自己的纸质版笔记,第二就是觉得可能差不多到时候自己写的这些没准挺久也用不到的,就简单记录一下,之后有需求再填进去慢慢学。
为了便于观看,给每一部分问题添加了标题,便于之后查阅。

参考文档

https://python-selenium-zh.readthedocs.io/zh_CN/latest

问题正文

  1. driver.find_element_by_name函数中调用的参数是什么?是从哪里找出来的对应的键值?

选择元素

这里查阅官方文档,发现调用的是html里面的name,
我看的是driver.find_element_by_id的函数(by id 对应的是id那by name肯定对应的就是name哈哈哈),对应的官方文档内容如下:

根据Id定位

如果你知道元素的id属性,那么就使用id定位吧。在id定位里,会返回第一个id属性匹配的元素,如果没有元素匹配,会抛出NoSuchElementException异常。
举个例子,我们来看一个页面:

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
  </form>
 </body>
<html>

我们可以这样定位表单元素form:
login_form = driver.find_element_by_id('loginForm')
除了这而这之外还有几个调用的函数by xpath之类的,之后有时间碰到了再补坑。

  1. elem.send_keys具体的作用是什么?如何对原本的网页产生影响?

发送按键给指定元素

如果内部的参数是一串字符串的时候,将会输入一些文本到一个文本区域;
如果内部的参数是一个定义好的形参例如key.RETURN时,将会模拟键盘中的某些按键;

  1. 如何实现选中元素然后进行元素点击?需要操作的部分是否包含有iframe时该如何判断iframe的id数值?

iframe内嵌页面处理

首先利用F12找到对应的操作元素的iframe。查找的方法直接硬搜iframe然后找就可以。在调用相关部分的id之类的东西的时候应当做到的是先利用driver.switch_to.frame进入嵌入的相关页面进行操作。
在这里插入图片描述 4. 如果我需要的属性没有id也没有name,那我该用什么来进行元素定位?

xpath定位

那就需要使用xpath来进行相应的处理了。
官方文档中写的定义xpath的具体方式有如下三种:
绝对路径(如果HTML有细微的改变就会失效)
HTML的第一个form元素
id属性为’loginForm’的form元素
实例:
对于html文件:

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>

在这里插入图片描述
需要注意的地方应该就只有那个作者加括号的话,即下标是从1开始迭代的。form[1]表示的是第一个类别为form的元素。
不过这个其实有更简单的方法,F12选中元素,然后右键:
在这里插入图片描述
在弄xpath之前记得先加一下sleep等待页面加载完毕,我在初学的时候就是因为没加sleep浪费了四五个小时才知道自己没加。如果不确定自己的xpath对不对直接ctrl+f搜索看看能不能搜到元素就ok了。
5. 如何利用原本的元素进行图片的保存,进而进行相关的图像处理等操作?

图片保存

img=driver.find_element_by_xpath('//*[@id="tcOperation"]/div[8]')
print(img)
res=img.screenshot_as_png
res=Image.open(BytesIO(res))
plt.imshow(res)
plt.show()
#如果要保存的话:
res.save("保存图片的文件名称.png或者.jpg之类的")
#基本就是文件名(路径)+后缀就行。

最终会完成相应的图片的截图,不过如果是能下载就直接下载就行。基本上大致操作就是调用属性screenshot_as_png就可以。然后转换为位图打开。
6.如何实现鼠标点击+拖动操作?

#鼠标左键按下、松开操作
from selenium.webdriver import ActionChains
ActionChains(self.driver).click_and_hold(div).perform()按下
move_to_element_with_offset移动
ActionChains(self.driver).release(div).perform()松开
分为三个阶段,按住鼠标,移动鼠标,松开鼠标。
我用到的是这个代码:

webdriver.ActionChains(driver).click_and_hold(roll).move_to_element_with_offset(roll, self.movelength, 0).release(roll).perform()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值