我需要使大学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查找元素。
答案 0 :(得分:0)
我认为此处的链接ID是动态的,如果您想单击某个元素,请在xpath下方使用。
locateClick= WebDriverWait(driver, 15).until(EC.visibility_of_element_located((By.XPATH,"//a[contains(text(),'Link')]")))
locateClick.click();