Я уже проверил несколько похожих вопросов и ответов, но, к сожалению, не нашел решения для моего конкретного случая.
Описание проблемы
Япытаясь заполнить и отправить форму на этом сайте .Форма была построена следующим образом:
<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!")
Эта часть работает нормально, и я могу поместить все значения в форму:
Нажатие на кнопку:
Я пытаюсь найти кнопку по XPATH:
hist_button = self.driver.find_element_by_xpath("//span[contains(.,'Historische Kurse anzeigen')]")
и нажать на эту кнопку, которая, кажется, найдена:
hist_button.click()
Это не работает для меня.Я также попытался выполнить кнопку, выполнив скрипт, как предложено в некоторых ответах по SO:
self.driver.execute_script("arguments[0].click();", hist_button)
Также это решение не работает в моем случае.Страница была обновлена, но не показала мне результат для исторических дат:
Это то, что я вижу после ручного нажатия на кнопку:
Не могли бы вы помочь мне выяснить, что я делаю не так?Спасибо.
Обновление 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
Когда янажмите на кнопку вручную, результат для выбранных данных будет отображаться правильно.Похоже, что выполнение кнопки не работает.