在Python中使用Selenium-chromedriver提交表单时出现问题

时间:2019-02-23 21:36:32

标签: python-3.x selenium-webdriver xpath web-scraping selenium-chromedriver

我已经检查了多个类似的问题和答案,但不幸的是没有找到针对我的特殊情况的任何解决方案。

问题描述

我正在尝试填写this site并提交表格。表单的构建如下:

<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

正如评论中建议的那样,我正在使用Select类从DropDown列表中选择值,如下所示:

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

当我手动单击按钮时,所选数据的结果将正确显示。看来按钮的执行不起作用。

0 个答案:

没有答案