Подтвердить что ты не робот

Python selenium нажмите на кнопку

Я новичок в python selenium, и я пытаюсь нажать на кнопку, которая имеет следующую структуру html:

<div class="b_div">

    <div class="button c_button s_button" onclick="submitForm('mTF')">
        <input class="very_small" type="button"></input>
        <div class="s_image"></div>
        <span>
           Search
        </span>
    </div>

    <div class="button c_button s_button" onclick="submitForm('rMTF')" style="margin-bottom: 30px;">
        <input class="v_small" type="button"></input>
        <span>
              Reset
        </span>
   </div>

</div>

Я бы хотел нажать кнопки Search и Reset выше (очевидно, индивидуально).

Я пробовал пару вещей, например:

driver.find_element_by_css_selector('.button .c_button .s_button').click()

или,

driver.find_element_by_name('s_image').click()

или,

driver.find_element_by_class_name('s_image').click()

но, кажется, мне всегда кажется, что NoSuchElementException, например:

selenium.common.exceptions.NoSuchElementException: Message: u'Unable to locate element: {"method":"name","selector":"s_image"}' ;

Мне интересно, могу ли я каким-либо образом использовать атрибуты onclick для HTML, чтобы сделать селен щелчок?

Любые мысли, которые могут указать мне в правильном направлении, были бы замечательными. Спасибо.

4b9b3361

Ответ 1

Удалите пространство между классами в селекторе css:

driver.find_element_by_css_selector('.button .c_button .s_button').click()
#                                           ^         ^

= >

driver.find_element_by_css_selector('.button.c_button.s_button').click()

Ответ 2

попробуйте следующее:

скачать firefox, добавить плагин "firebug" и "firepath"; после установки их перейдите на свою веб-страницу, запустите firebug и найдите xpath этого элемента, он уникален на странице, чтобы вы не ошиблись.

Смотрите изображение: инструкция

browser.find_element_by_xpath ('просто скопировать и вставить Xpath'). click()

Ответ 3

У меня была такая же проблема с использованием Phantomjs в качестве браузера, поэтому я решил следующее:

driver.find_element_by_css_selector('div.button.c_button.s_button').click()

По существу, я добавил имя тега DIV в цитату.

Ответ 4

Следующий процесс отладки помог мне решить подобную проблему.

with open("output_init.txt", "w") as text_file:
    text_file.write(driver.page_source.encode('ascii','ignore'))


xpath1 = "the xpath of the link you want to click on"
destination_page_link = driver.find_element_by_xpath(xpath1)
destination_page_link.click()


with open("output_dest.txt", "w") as text_file:
    text_file.write(driver.page_source.encode('ascii','ignore'))

После этого вы должны иметь два текстовых файла с начальной страницей ('output_init.txt') и страницей, на которую вы были перенаправлены, после нажатия кнопки ('output_dest.txt'). Если они одинаковые, тогда yup, ваш код не работает. Если это не так, значит, ваш код работал, но у вас другая проблема. Проблема для меня, казалось, в том, что необходимый javascript, который преобразовал контент для создания моего крючка, еще не выполнен.

Ваши варианты, как я вижу:

  • Попросите водителя выполнить javascript, а затем вызвать вашу находку код элемента. Найдите более подробные ответы на это по stackoverflow, поскольку я не придерживался такого подхода.
  • Просто найдите сопоставимый крючок на 'output_dest.txt', который даст тот же результат, что и я.
  • Попробуйте немного подождать, прежде чем нажимать что-нибудь:

xpath2 = "ваш xpath, на который вы собираетесь нажать"

WebDriverWait (драйвер, тайм-аут = 5).until(lambda x: x.find_element_by_xpath (xpath2))

Подход xpath не обязательно лучше, я просто предпочитаю его, вы также можете использовать подход селектора.