Geckodriver не может нажать на элемент | Python 3 Coding

1

Как сказано в теме, я пытаюсь нажать на найденный элемент, но в зависимости от версий geckodriver и firefox (для Linux) я получаю 2 результата. Со старыми версиями (например, FF38 + geckodriver 0.15 → 0.17.0), мне есть что-то вроде сообщения здесь.

Элемент щелкнут, появится новое окно, но действие не будет завершено. Geckodriver висит щелчок.

Для более новых версий (FF52 ESR → FF60 ESR + geckodriver 0.19.0 → 0.21.0) клик не действует... И, конечно, я не могу использовать метод send_keys().

Вот элемент:

<span onclick="modalClientPopup('http://myserver.local/target', null, 800, null, false);">
    <img src="img/target.gif" title="Target" alt="Target" onmouseover="iconOnmouseover(this, 0);" onmouseout="iconOnmouseout(this, 0);">
    <br>
    <label id="home_label_0" title="Target" style="text-decoration: underline; cursor: auto; font-weight: normal;" onmouseover="iconOnmouseover(this, 0);" onmouseout="iconOnmouseout(this, 0);">
        Target folder
    </label>
</span>

Вот код:

iframe = browser.find_element_by_xpath("//iframe[@keyid='1/ACCUEIL']")
browser.switch_to.frame(iframe)
focus_lnk = browser.find_element_by_xpath("//label[@title='Target']")
window = browser.window_handles
print(len(window))
action = ActionChains(browser)
action.move_to_element(focus_lnk)
action.click(focus_lnk)
action.perform()
print(len(window))

Отображается первая печать, но не вторая. Результат будет таким же, если я использую focus_lnk.click().

Лучше всего использовать версии 55+, чтобы иметь опцию без головок. Есть ли работа вокруг/решение для этого?

Теги:
web-scraping
selenium
geckodriver

1 ответ

1
Лучший ответ

modalClientPopup() ссылается на window.showModalDialog(), который устарел.

Поэтому я изменил html-код на лету, кусок JavaScript:

browser.execute_script("""
setInterval (function() { override (); }, 500);

function override () {
    var divElem;
    var innerDoc;
    var focus;
    divElem = document.getElementsByClassName('content_sub_zone');
    innerDoc = divElem[0].childNodes[0].contentDocument;
    focus = innerDoc.getElementsByTagName('span')[0];
    focus.setAttribute("onclick", "window.open('http://myserver.local/target', '', 'width=800,height=400');");
                    }
                    """)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню