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

honghd · 2017年10月12日 · 最后由 honghd 回复于 2017年10月13日 · 3110 次阅读

请教各位,我用 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 条回复 时间 点赞

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

kawa 回复

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

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

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

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

槽神 回复

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

frog2 回复

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

用 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 之类的什么鬼~

槽神 回复

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

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