代码之家  ›  专栏  ›  技术社区  ›  Adam Matan

使用python自动按下“提交”按钮

  •  1
  • Adam Matan  · 技术社区  · 15 年前

    我用的公共汽车公司经营着一个糟糕的网站( Hebrew , English )这使得一个简单的“从A到B今天的时间表”查询成为一个噩梦。我怀疑他们试图鼓励使用昂贵的短信息查询系统。

    我正在尝试从站点获取整个时间表,方法是将每个可能的点的查询提交到每个可能的点,总共大约有10个查询。查询结果将显示在弹出窗口中。我对Web编程很陌生,但熟悉Python的基本方面。

    1. 解析页面、从下拉菜单中选择一个值,然后使用脚本按“提交”是最优雅的方法吗?
    2. 如何将新弹出窗口的内容作为输入提供给程序?

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  10
  •   gimel    15 年前

    Twill 是一种简单的网页浏览脚本语言。它碰巧是运动A python api .

    斜纹实质上是一个薄壳周围的机械包装。所有twill命令都在commands.py文件中实现,py parsing完成对输入的解析并将其转换为python命令的工作(请参见parse.py)。交互式shell工作和readline支持通过命令模块(来自标准的python库)实现。

    以上链接单据的“按”提交示例:

    from twill.commands import go, showforms, formclear, fv, submit
    
    go('http://issola.caltech.edu/~t/qwsgi/qwsgi-demo.cgi/')
    go('./widgets')
    showforms()
    
    formclear('1')
    fv("1", "name", "test")
    fv("1", "password", "testpass")
    fv("1", "confirm", "yes")
    showforms()
    
    submit('0')
    
        2
  •  10
  •   Geo    15 年前

    我建议你用 mechanize . 以下是他们页面中的代码片段,显示了如何提交表单:

    
    import re
    from mechanize import Browser
    
    br = Browser()
    br.open("http://www.example.com/")
    # follow second link with element text matching regular expression
    response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1)
    assert br.viewing_html()
    print br.title()
    print response1.geturl()
    print response1.info()  # headers
    print response1.read()  # body
    response1.close()  # (shown for clarity; in fact Browser does this for you)
    
    br.select_form(name="order")
    # Browser passes through unknown attributes (including methods)
    # to the selected HTMLForm (from ClientForm).
    br["cheeses"] = ["mozzarella", "caerphilly"]  # (the method here is __setitem__)
    response2 = br.submit()  # submit current form
    
    # print currently selected form (don't call .submit() on this, use br.submit())
    print br.form
    
    
        3
  •  7
  •   ironfroggy    15 年前

    您很少希望实际“按下提交按钮”,而不是直接向处理程序资源发出GET或POST请求。查看表单所在的HTML,查看它提交到哪个URL的参数,以及它是get还是post方法。您可以用urllib(2)很容易地形成这些请求。