我如何执行javascript以使用python和selenium更改日期

时间:2018-08-17 22:22:55

标签: javascript python html selenium

我对Selenium和javascript不熟悉,但是我正在尝试编写Python,它将更改体育比赛结果的日期。记分牌页面的顶部是。 “当前”日期(页面加载时默认为01/05/2018)位于中间,并且<&>具有:

    <a href="javascript:changeDate('01/05/2018');"><</a>
    " 01/05/2018 " 
    <a href="javascript:changeDate('01/07/2018);">></a> ==$0

    <form name="params_form" action="/team/schedule_list" method="post">
    <input id="params_form_schedule_date" type="hidden" name="schedule_date"
    value="01/05/2018"> == $0
    </form>

该网站的html较早版本具有:

    <script language="javascript">
            function changeDate(val){
                $('#params_form_schedule_date').val(val);
                document.params_form.submit();
            }

在Python中,我尝试过:

    date = input ('Enter Date (mm/dd/yyyy): ')

    driver.execute_script('changeDate()', date)

    driver.execute_script('''
        var date = arguments[0];
        changeDate().value;''', date)

我也尝试了其他一些方法,但是没有任何效果。加载圆圈将显示正在发生某些事情,但是默认日期不会更改。在这里的任何帮助将不胜感激。 (我也尝试按照此处的正确格式进行设置,但是对于任何错误我深表歉意,这是我第一次发布)。

3 个答案:

答案 0 :(得分:0)

您的代码不起作用,因为您必须在driver.execute_script()中发送changeDate(val)的参数val。

您可以执行以下操作:

date = '02/05/2018'
driver.execute_script("changeDate('{}')".format(date)) # Just pay attention to the " and the ' in the command

希望有帮助

答案 1 :(得分:0)

input_date = <date in format expected>
return_val = driver.execute_script("return changedate(arguments[0])", input_date)

这可以帮助您避免所有细微差别使用字符串或“或”。

答案 2 :(得分:0)

我最终用以下方法解决了这个问题:

date = input ('Enter Date (mm/dd/yyyy): ')
element=driver.find_element_by_css_selector("input[id=params_form_schedule_date]")
driver.execute_script('arguments[0].setAttribute("value", "%s")' % date, element)
element.submit()

感谢大家的帮助!