51Testing软件测试论坛

标题: python+Selenium [打印本页]

作者: 165372300    时间: 2016-3-1 18:26
标题: python+Selenium
我准备写一个程序来自动注册账号,但是在这个填入密码的时候,无法用
browser.find_element_by_id('_ocx_password1').send_keys('abc123'),在如下【图1】密码框中写入密码

用firefox自带的查看器,看到这个输入框的源码如下【图2】,奇怪的是,它是embed标签,而不是input标签。通过他的id无法sendkey,不过也不会报错。

我尝试过用js赋值,还是不行。
还尝试过用python模拟鼠标和键盘的操作,如【图3】,依然不行,这种方法在其他input标签的输入框内是可以的。

此外还尝试过,写按键精灵脚本输入,按键精灵无法记录这个embed标签内的操作,也无法往里面写入。

是不是这个embed标签,有什么密码控件保护,无法接受输入啊。
我已经快崩溃了,哪个大神救救我啊


作者: prettyfool    时间: 2016-3-2 10:25
lz是不是可以找一下,利用下js脚本来定位执行,selenium中好像有个javascriptExecu的方法可以引用js脚本,通过脚本进行DOM节点操作
具体资料查一下吧,我只提供一个思路
作者: seagull1985    时间: 2016-3-2 14:14
如果是用了密码控件,一般有保护。。。本人尝试过无数方法,基本无解。。。。
所以当时只能采用半自动的方式,到了这个地方,暂停人工介入,再继续。。。看看其他人有没有什么办法吧。。。
作者: chenyansong    时间: 2016-3-2 19:56
按照键盘的实现方式,一个字符一个字符来送ASCII码。
作者: 165372300    时间: 2016-3-3 10:37
chenyansong 发表于 2016-3-2 19:56
按照键盘的实现方式,一个字符一个字符来送ASCII码。

键盘操作也不行,我试过python的win32api,完全没反应。
作者: 165372300    时间: 2016-3-3 10:39
prettyfool 发表于 2016-3-2 10:25
lz是不是可以找一下,利用下js脚本来定位执行,selenium中好像有个javascriptExecu的方法可以引用js脚本, ...

js是不行的。还是感谢
作者: 165372300    时间: 2016-3-3 10:43
seagull1985 发表于 2016-3-2 14:14
如果是用了密码控件,一般有保护。。。本人尝试过无数方法,基本无解。。。。
所以当时只能采用半自动的方 ...

这尼玛,win32api模拟鼠标键盘应该算是很底层的了。也不行,密码控件确实还是屌啊
作者: 165372300    时间: 2016-3-3 11:10
seagull1985 发表于 2016-3-2 14:14
如果是用了密码控件,一般有保护。。。本人尝试过无数方法,基本无解。。。。
所以当时只能采用半自动的方 ...

刚在网上看,貌似找到解法了,keybd_event这种键盘模拟确实是不行的。说是,需要使用驱动级的键盘模拟输入技术才能输进去。附原帖地址:http://bbs.csdn.net/topics/391815188
作者: seagull1985    时间: 2016-3-3 11:19
165372300 发表于 2016-3-3 10:43
这尼玛,win32api模拟鼠标键盘应该算是很底层的了。也不行,密码控件确实还是屌啊

一个自动化工具就把密码控件给破了,那他们都不用干了。。。。一个控件卖那么多钱。。。所以基本无解。。不用白费心思了,非要全自动,除非把密码控件去掉
作者: chenyansong    时间: 2016-3-5 13:14
能手工输入,直接用windows的API应该可以,一个字符的传ACSII码,用python调用CMD。
作者: 165372300    时间: 2016-3-10 23:06
seagull1985 发表于 2016-3-3 11:19
一个自动化工具就把密码控件给破了,那他们都不用干了。。。。一个控件卖那么多钱。。。所以基本无解 ...

哈哈,bbs.csdn.net/topics/391815188这个帖子的方法,用驱动级键盘模拟确实可以解决。我用的帖子里面的DD驱动,暴简单,一下就解决了。你可以试试看。
作者: 165372300    时间: 2016-3-10 23:07
chenyansong 发表于 2016-3-5 13:14
能手工输入,直接用windows的API应该可以,一个字符的传ACSII码,用python调用CMD。

winapi没用的,密码空间都是屏蔽了WINAPI的,http://bbs.csdn.net/topics/391815188,这个帖子讲的很清楚,这种情况需要用驱动级的键盘模拟。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2