Проблема при отправке формы селен-хромедрайвер в Python - PullRequest
0 голосов
/ 24 февраля 2019

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

Описание проблемы

Япытаясь заполнить и отправить форму на этом сайте .Форма была построена следующим образом:

<form id="hikuZR" action="/historische-kurse/BMW" method="post">
...
<div class="hidden"><input type="submit" value="senden"></div>
<span class="button bgBlue btn-xs-block pull-sm-right" onclick="submitForm($(this));">Historische Kurse anzeigen</span>
</div>
<input type="hidden" name="pkBHTs" value="1550956687">
</form>

Вот как я ее выполняю:

Заполнение формы

start_day_1 = self.driver.find_element_by_xpath("//select[@name='inTag1']/option[@value=22]")
    start_day_1.click()
    start_day_2 = self.driver.find_element_by_xpath("//select[@name='inTag2']/option[@value=22]")
    start_day_2.click()
    start_month_1 = self.driver.find_element_by_xpath("//select[@name='inMonat1']/option[@value=08]")
    start_month_1.click()
    start_month_2 = self.driver.find_element_by_xpath("//select[@name='inMonat2']/option[@value=08]")
    start_month_2.click()
    start_year_1 = self.driver.find_element_by_xpath("//select[@name='inJahr1']/option[@value=2018]")
    start_year_1.click()
    start_year_2 = self.driver.find_element_by_xpath("//select[@name='inJahr2']/option[@value=2018]")
    start_year_2.click()
    try:
        market = self.driver.find_element_by_xpath("//select[@name='strBoerse']/option[@value='%s']" % 'XETRA')
        market.click()
        sleep(randint(7, 10))
    except NoSuchElementException:
        print("Element by xpath does not exist!")

Эта часть работает нормально, и я могу поместить все значения в форму: enter image description here

Нажатие на кнопку:

Я пытаюсь найти кнопку по XPATH:

hist_button = self.driver.find_element_by_xpath("//span[contains(.,'Historische Kurse anzeigen')]")

и нажать на эту кнопку, которая, кажется, найдена: enter image description here

hist_button.click()

Это не работает для меня.Я также попытался выполнить кнопку, выполнив скрипт, как предложено в некоторых ответах по SO:

self.driver.execute_script("arguments[0].click();", hist_button)

Также это решение не работает в моем случае.Страница была обновлена, но не показала мне результат для исторических дат: enter image description here

Это то, что я вижу после ручного нажатия на кнопку: enter image description here

Не могли бы вы помочь мне выяснить, что я делаю не так?Спасибо.

Обновление 25.02.2018

Как предлагается в комментарии, я выбираю значения из списков DropDown с помощью класса Select следующим образом:

start_day_1 = Select(self.driver.find_element_by_xpath("//select[@name='inTag1']"))
start_day_1.select_by_value("22")
start_day_2 = Select(self.driver.find_element_by_xpath("//select[@name='inTag2']"))
start_day_2.select_by_value("22")
start_month_1 = Select(self.driver.find_element_by_xpath("//select[@name='inMonat1']"))
start_month_1.select_by_value("8")
start_month_2 = Select(self.driver.find_element_by_xpath("//select[@name='inMonat2']"))
start_month_2.select_by_value("8")
start_year_1 = Select(self.driver.find_element_by_xpath("//select[@name='inJahr1']"))
start_year_1.select_by_value("2018")
start_year_2 = Select(self.driver.find_element_by_xpath("//select[@name='inJahr2']"))
start_year_2.select_by_value("2018")
market = Select(self.driver.find_element_by_xpath("//select[@name='strBoerse']"))
market.select_by_value('XETRA')

И я вижу выбранные значения в форме (с «первой» версией, опубликованной в описании, я также видел значения в форме).После этого я нажимаю кнопку снова без каких-либо эффектов.Страница была обновлена, но я не вижу результатов:

hist_button = self.driver.find_element_by_xpath("//span[contains(.,'Historische Kurse anzeigen')]")
hist_button.click()
html_historical = self.driver.page_source

или

hist_button = self.driver.find_element_by_xpath("//span[contains(.,'Historische Kurse anzeigen')]")
self.driver.execute_script("arguments[0].click();", hist_button)
html_historical = self.driver.page_source

enter image description here

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

...