Селен нет такого исключения элемента - Python - PullRequest
0 голосов
/ 01 ноября 2019

Мне нужно автоматизировать некоторые вещи за гиперссылками из SAP Portal моего университета. Я понял, что использование Selenium - это путь сюда. Но оказывается, что большинство веб-элементов существуют faked и созданы из JavaScript, поэтому, вероятно, веб-драйвер не может СМ. их.

Вот что я должен нажать:

<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 дляоткройте консоль разработчика и вставьте искусственный щелчок по желаемому элементу, но даже это не удалось, потому что, когда я пытаюсь добавить 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, который полностью остался незамеченным, и затем найти элемент, используя относительный XPath из iframe.

1 Ответ

0 голосов
/ 02 ноября 2019

Я думаю, что идентификатор ссылки здесь динамический, и если вы хотите щелкнуть по элементу, используйте ниже xpath.

locateClick= WebDriverWait(driver, 15).until(EC.visibility_of_element_located((By.XPATH,"//a[contains(text(),'Link')]")))
locateClick.click();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...