【问题标题】:How to automate interaction for a website with POST method如何使用 POST 方法自动与网站交互
【发布时间】:2014-04-14 13:58:13
【问题描述】:

我需要在本网站的文本框中输入文字:

http://www.link.cs.cmu.edu/link/submit-sentence-4.html

然后我需要返回返回页面的 html。我看过其他解决方案。但我知道,没有适合所有人的解决方案。我见过 selenium,但我不了解它的文档以及如何应用它。请帮帮我谢谢。

顺便说一句,我有一些使用 beautifulsoup 的经验,如果有帮助的话。我之前曾问过,但 requests 是唯一的解决方案。不过我不知道如何使用它

【问题讨论】:

    标签: python selenium mechanize


    【解决方案1】:

    首先,如果您正在查看单个页面,那么通过 BeautifulSoup 实现的恕我直言是多余的。您最好查看页面源并从中获取表单结构。您的表单非常简单:

    <FORM METHOD="POST"
    ACTION="/cgi-bin/link/construct-page-4.cgi#submit">
    <input type="text" name="Sentence" size="120" maxlength="120"></input><br>
    <INPUT TYPE="checkbox" NAME="Constituents" CHECKED>Show constituent tree &nbsp;
    <INPUT TYPE="checkbox" NAME="NullLinks" CHECKED>Allow null links &nbsp;
    <INPUT TYPE="checkbox" NAME="AllLinkages" OFF>Show all linkages &nbsp;
    <INPUT TYPE="HIDDEN" NAME="LinkDisplay" VALUE="on">
    <INPUT TYPE="HIDDEN" NAME="ShortLength" VALUE="6">
    <INPUT TYPE="HIDDEN" NAME="PageFile" VALUE="/docs/submit-sentence-4.html">
    <INPUT TYPE="HIDDEN" NAME="InputFile" VALUE="/scripts/input-to-parser">
    <INPUT TYPE="HIDDEN" NAME="Maintainer" VALUE="sleator@cs.cmu.edu">
    <br>
    <INPUT TYPE="submit" VALUE="Submit one sentence">
    <br>
    </FORM>
    

    所以您应该能够提取字段并填充它们。

    我会用curl-X POST 来做这件事(比如here——也请看答案:))。

    如果你真的想在 python 中做,那么你需要做类似POST using requests的东西。

    【讨论】:

    • 是的。这绝对比使用简单的 curl 更好,而不是使用任何框架来返回 html。 +1
    • 好吧,我必须在 python 中执行此操作。下面还有另一个答案,它使输入变得轻而易举。如果您能帮助提取 html 源代码就好了。
    【解决方案2】:

    直接从文档中提取并更改为您的示例。

    from selenium import webdriver
    
    # Create a new instance of the Firefox driver
    driver = webdriver.Firefox()
    
    # go to the page
    driver.get("http://www.link.cs.cmu.edu/link/submit-sentence-4.html")
    
    # the page is ajaxy so the title is originally this:
    print driver.title
    
    # find the element that's name attribute is Sentence
    inputElement = driver.find_element_by_name("Sentence")
    
    # type in the search
    inputElement.send_keys("You're welcome, now accept the answer!")
    
    # submit the form 
    inputElement.submit()
    

    这至少可以帮助您输入文本。然后,查看this example 以检索 html。

    【讨论】:

    • 谢谢巴德。更新。我可以使用“.current_url”访问 URL。但是,您的示例不适用于返回 html。
    【解决方案3】:

    遵循 OP 的要求,在 python 中拥有进程。

    我不会使用 selenium,因为它会在您的桌面上启动一个浏览器,并且对于仅填写表单并获得其回复来说太过分了(如果您的页面包含 JS 或 ajax 内容,您可以证明它是合理的)。

    表单请求代码可能类似于:

    import requests
    
    payload = {
        'Sentence': 'Once upon a time, there was a little red hat and a wolf.',
        'Constituents': 'on',
        'NullLinks': 'on',
        'AllLinkages': 'on',
        'LinkDisplay': 'on',
        'ShortLegth': '6',
        'PageFile': '/docs/submit-sentence-4.html',
        'InputFile': "/scripts/input-to-parser",
        'Maintainer': "sleator@cs.cmu.edu"
    }
    
    r = requests.post("http://www.link.cs.cmu.edu/cgi-bin/link/construct-page-4.cgi#submit", 
                      data=payload)
    
    print r.text
    

    r.text 是您可以通过例如解析的 HTML 正文美丽的汤。

    查看 HTML 回复,我认为您的问题在于处理 &lt;pre&gt; 标记内的文本,但这是本问题范围之外的完全不同的事情。

    HTH,

    【讨论】:

      猜你喜欢
      • 2012-11-08
      • 1970-01-01
      • 2019-06-13
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多