【问题标题】:Selenium No Such Element Exception - PythonSelenium 没有这样的元素异常 - Python
【发布时间】:2019-11-01 20:41:47
【问题描述】:

我需要自动化我大学 SAP 门户中的一些超链接背后的一些东西。我想使用Selenium 是去这里的方式。但事实证明,大多数网络元素都是 faked 并从 JavaScript 创建的,这可能是 webdriver 无法SEE它们的原因。

这是我必须点击的:

<a class="urLnkDragRelate" id="Link6c5f851b" ct="LN" st="" tabindex="0" ti="0" title="Feedback Form" onkeydown="return (sapUrMapi_Link_activate('Link6c5f851b',event))" href="javascript:void(0)" target="" onclick="return htmlbDoEvent(this,'C','onclick','0','htmlb_222143_0',6,1,'',0);">
  <span class="urFontStd">
    <span ct="TV" class="urTxtStd">Feedback Form</span>
  </span>
</a>

这里是页面来源:https://pastebin.com/Dpc36nxL

理解截图:https://imgur.com/a/qvxhVFA

我尝试使用解决方法,通过使用ActionChains 打开开发者控制台,并在所需元素上注入人工 CLICK,但即使这样也失败了,因为当我尝试在最后注入 JavaScript 时,此处的链接会更改每一次。 document.querySelector("#Link5908e99d")

类似这样的:

assert "Feedback Form" in driver.page_source

# open up the developer console
driver.send_keys(keys.Keys.CTRL+keys.Keys.SHIFT+'i')
driver.perform()

time.sleep(3)

action.send_keys(keys.Keys.ENTER)

# inject the JavaScript...
action.send_keys("document.querySelector("#Link5908e99d").click()"+keys.Keys.ENTER)

action.perform()

我该如何进行呢?

解决方案是切换到完全被忽视的 iframe,然后使用 iframe 中的相对 XPath 找到元素。

【问题讨论】:

    标签: javascript python-3.x selenium selenium-webdriver


    【解决方案1】:

    我认为链接 id 在这里是动态的,如果你想点击一个元素,那么请使用下面的 xpath。

    locateClick= WebDriverWait(driver, 15).until(EC.visibility_of_element_located((By.XPATH,"//a[contains(text(),'Link')]")))
    locateClick.click();
    

    【讨论】:

    • 返回in until raise TimeoutException(message, screen, stacktrace)
    • 如果可能的话你能分享网站吗?
    • 这是一个大学门户网站(需要登录),我已经在我的帖子中分享了完整的源代码。
    • 抱歉,我无法根据您的网站识别您的元素pastebin.com/cMHA3Ftk
    • 意识到源代码并未完全复制,因为 Chrome 还没有该功能。不过我确实得到了完整的源代码,并在帖子中进行了更新。
    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2018-03-21
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多