硒没有这样的元素异常-Python

时间:2019-11-01 20:41:47

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

我需要使大学SAP门户中某些超链接后面的东西自动化。我认为使用Selenium是这里的方法。但是事实证明,大多数Web元素都是faked并由JavaScript创建的,这可能就是为什么webdriver无法看到它们的原因。

这是我必须单击的内容:

<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查找元素。

1 个答案:

答案 0 :(得分:0)

我认为此处的链接ID是动态的,如果您想单击某个元素,请在xpath下方使用。

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