首页 > 其他分享 >谈谈selenium中的clear后输入内容异常的处理

谈谈selenium中的clear后输入内容异常的处理

时间:2023-04-20 10:34:32浏览次数:37  
标签:keys selenium clear driver send element 谈谈 password find

谈谈selenium中的clear后输入内容异常的处理

案例

  • 代码

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('http://124.223.31.21:9097/#/')
    driver.find_element('id', 'formLabelAlign.username').send_keys('20154084')
    driver.find_element('id', 'formLabelAlign.password').send_keys('123456')
    driver.find_element('css selector', '.submit>button').click()
    
  • 你会发现无法登录,道理很简单

  • 你输入的密码追加过去了,send_keys如果之前有内容,是会保留的,追加你输入的内容。

  • 你可能会这样处理,在密码元素上先清空之前的内容(clear),然后再去输入

    driver.find_element('id', 'formLabelAlign.username').send_keys('20154084')
    driver.find_element('id', 'formLabelAlign.password').clear()
    driver.find_element('id', 'formLabelAlign.password').send_keys('123456')
    
  • 一个奇怪的现象发生了,你是清空了之前的内容,但你输入的是12345,6没了!

  • 屡试不爽
  • 但如果输入12345678,或者helloworld,缺又是可以的,我反正是解释不了
  • 当然这不是我们的重点。
  • 实际工作中我也遇到过,有同学也遇到过类似的情况
  • 我们可以用其他等价的手段来替代这个清空后输入的行为

解决方法一:键盘操作

  • 在密码上按CTRL+A,再输入

  • 示例代码

    driver.find_element('id', 'formLabelAlign.password').send_keys(Keys.CONTROL,'A')
    driver.find_element('id', 'formLabelAlign.password').send_keys('123456')
    driver.find_element('css selector', '.submit>button').click()
    
  • 从运行的效果看,是全选了,但依然输入的是12345(至此我非常怀疑是send_keys的问题)

解决方法二:鼠标操作

  • 在元素上双击(相当于是全选的操作)

  • 然后再输入

  • 示例代码

    ele_password  = driver.find_element('id', 'formLabelAlign.password')
    ActionChains(driver).double_click(ele_password).send_keys('123456').perform()
    
  • 效果OK

  • 这样也是ok的

    ele_password  = driver.find_element('id', 'formLabelAlign.password')
    ActionChains(driver).double_click(ele_password).send_keys_to_element(ele_password,'123456').perform()
    

  • 对于这个case,既然怀疑是send_keys的问题,那我们完全可以用其他方式来输入内容

  • 比如这样

    ele_password  = driver.find_element('id', 'formLabelAlign.password')
    ele_password.clear()
    ActionChains(driver).send_keys_to_element(ele_password,'123456').perform()
    
  • 即保留了clear,但用其他方式来输入内容

解决方法三:第三方库来输入

  • 可以键盘输入的库就多了

  • 比如pyautogui

  • 示例代码

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('http://124.223.31.21:9097/#/')
    driver.find_element('id', 'formLabelAlign.username').send_keys('20154084')
    ele_password  = driver.find_element('id', 'formLabelAlign.password')
    ele_password.clear()
    import pyautogui
    pyautogui.typewrite('123456')
    driver.find_element('css selector', '.submit>button').click()
    
  • 的确搞定了

  • 但有点奇怪的是

  • 我加了sleep,并没有看到在密码框中有输入123456


  • 画蛇添足

    ele_password.clear()
    ele_password.click()
    import pyautogui
    pyautogui.typewrite('123456')
    
  • click的效果是有的,但是,又只输入了12345

  • 至此有点懵,不是send_keys的原因?还是说send_keys跟typewrite有一样的问题?

解决方法四:js操作

  • js操作就比较丝滑,因为它可以对一个元素的value进行赋值,不存在什么clear

  • 示例代码

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('http://124.223.31.21:9097/#/')
    driver.find_element('id', 'formLabelAlign.username').send_keys('20154084')
    js = "document.querySelector('[placeholder=请输入密码]').value='123456'"
    driver.execute_script(js)
    driver.find_element('css selector', '.submit>button').click()
    

说在最后

  • 方法其实很多,你要思考的是如何模拟这个操作
  • 上面的未必能解决你的问题,你需要根据实际情况去探索

标签:keys,selenium,clear,driver,send,element,谈谈,password,find
From: https://www.cnblogs.com/wuxianfeng023/p/17335862.html

相关文章

  • selenium 定位
    1、find_element&&find_elements的区别:1、find_element得到的是一个webelement的对象,只会返回查找到的第一个对象;find_elements得到的是一个列表,返回查找到的所有,并保存到列表中。2、如找不到,print(driver.find_element_by_id('kw'))find_element会......
  • selenium中的click()操作不稳定情况
      曾听说过click操作不稳定,今天碰到了,分享一波driver.get("D:\PythonFiles\wlxcUI\practice\检测代码\demo.html")driver.maximize_window()el=driver.find_element_by_name("mfile")el.click()通过name吵到的input元素,无法点击上传文件,更换为ActionChains(driver).move_t......
  • selenium部分知识点总结
    selenium部分总结最近写了一个selenium自动化脚本.基于此总结一些常用的代码1.用户输入换行符不终止输入strings=''s=input('请输入:(q停止输入)')whiles!='q':#此处可自行设置strings=strings+s+'\n's=input()"""输入:B07RW2M73......
  • selenium三种等待方式 (强制等待、隐式等待、显示等待)
    ​ 方式一:强制等待time.sleep(n)#单位:秒复制代码程序表现:强制暂停程序运行,等待n秒后继续执行后续代码演示代码:time.sleep(3)driver.find_element(By.ID,"kw").send_keys("华测教育")复制代码方式二:隐式等待driver.implicitly_wait(n)#单位:秒复制代码......
  • selenium爬取异步加载的网站
    为了便利化使用selenium驱动浏览器进行操作,遇到一个网页,大部分内容都是通过xhr请求后再通过前端js处理显示,带来的一个问题就是,采用显示等待无法准确的定位到需要的节点。因此,需要考虑采用判断xhr请求是否完成后再进行定位,或者直接获取xhr请求返回内容的做法。对于selenium爬虫来说,......
  • selenium登录cnblogs、抽屉半自动点赞、xpath的使用、打码平台使用、scrapy介绍
    昨日回顾#1beautifulsoup4使用-xml解析库,用它来解析爬回来的html内容,从中找出我们需要的内容#2遍历文档树-.的使用soup.html.body.p.a-获取属性对象.attrs.get('href')-获取文本对象.textstringstrings-子节点,父节点,兄......
  • 爬取的数据存mysql中、加代理,cookie,header,加入selenium、布隆过滤器、scrapy-redis实
    上节回顾#1scrapy架构 -爬虫:写的一个个类-引擎: -调度器:排队,去重-下载器-pipline-下载中间件-爬虫中间件#2命令 -scrapystartproject项目名-scrapygensipder爬虫名网址-scrapycrawl爬虫名字-run.py#......
  • [软件人生]毕业设计做不出来,学校勒令退学——谈谈问问题和当前教育的一个小点
    起因看到以后第一感觉,就是一个小孩子在通过某种手段骗取别人的同情,以便于达到自己的某种不劳而获的目的,于是我发布了回复,希望他能认识到这一点是不好的。结果,我得到了下面这样的回复:“我是北理的。。。。这个就是我的题目我没有学过怎么办?你们是不是没有做过毕业设计。。。你们做......
  • 记录selenium,python自动化测试中的chromedriver.exe地址和打开后自动关闭浏览器问题
    selenium的官方地址为:https://selenium-python.readthedocs.io/index.html镜像地址:https://npmmirror.com/#导入webdriverfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBy#调用键盘按键操作时需要引入的Keys包fromselenium.webdriver.common.k......
  • 谈谈什么是悲剧
    很多人经常说,悲剧,往往是对着最后的结局来谈论的观点,而实际上,这个观点是有问题的。黑格尔有一个著名的悲剧理论,他认为:悲剧的实质是伦理的自我分裂与重新和解,伦理实体的分裂是悲剧冲突产生的根源。悲剧冲突是两种片面的伦理实体的交锋。在黑格尔看来,冲突的悲剧性在于:这种冲突中对立的......