Selenium 请教:定位 form 表单元素 Unable to locate element

honghd520 · 发布于 2017年10月12日 · 最后由 honghd520 回复于 2017年10月13日 · 242 次阅读

请教各位,我用python selenium webdriver定位高亮这个元素(如图页面代码),但一直提示无法找到元素
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"mobile_file_url"}

用等待元素出现也是超时,是原因form表单的type=“hidden”原因吗?请问各位朋友我这边出现什么问题?谢谢!
WebDriverWait(driver,30,0.5).until(EC.presence_of_element_located((By.ID,"mobile_file_url")))
driver.find_element_by_id("mobile_file_url")

共收到 8 条回复
2417

你把完整的元素目录截图出来,有可能是切换frame引起的

A6056d
honghd520 · #2 · 2017年10月12日 作者
2417kawa 回复

底部这里的标签没显示有frame

16280

type=“hidden”只是一个“貌似为了”防跨站攻击的隐藏域,用来记录一个随机串的吧,肯定于此无关,因为这根本不是form的属性,而是form的一个childobject而已

不妨换xpath试一下,如果OK了,说明前端有小bug或者结构太过复杂导致按照id无法查询到

D7ec8a

给个链接,实际操作一下肯定大把的人可以解决hh~

A6056d
honghd520 · #5 · 2017年10月12日 作者
16280fudax 回复

试过用class_name和xpath都是Unable to locate element,所以搞不明白。

A6056d
honghd520 · #6 · 2017年10月12日 作者
D7ec8aGrokLuffy 回复

😄 网址不好贴,需要用户名密码。谢谢哈

16280

用chrome打开调试工具(F12),进入console,输入:

alert(window.document.getElementById("mobile_file_url").getAttribute("value"));
如果你的网页有用jquery,那就这样写:
alert($("#mobile_file_url").val());
jquery的前提下,如果这一句没结果,那就试试:
alert($("#mobile_file_url").eq(0).val());
如果有了结果,那就说明id使用重复,js或者jsp编译就应该有报错才对,可能被IDE给忽略掉了,找开发解决

如果以上操作,第一步弹出窗口有内容(就是那个zip的url),那说明文档结构是没问题的,如果最终没有结果,那么还是要找开发去看,到底用了什么控件,是flash啊还是SWFUpload之类的什么鬼~

A6056d
honghd520 · #8 · 2017年10月13日 作者
16280fudax 回复

谢谢!按你的方法排查最后发现是window_handle没切换,大意了。

A6056d honghd520 关闭了讨论 10月13日 15:50
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册