【问题标题】:How to automate browsing using python? [closed]如何使用python自动浏览? [关闭]
【发布时间】:2010-11-20 12:56:15
【问题描述】:

假设,我需要在特定网站上执行一组程序 比如说,填写一些表格,点击提交按钮,将数据发送回服务器,接收响应,再次根据响应做一些事情并将数据发送回网站的服务器。 我知道 python 中有一个 webbrowser 模块,但我想在不调用任何 web 浏览器的情况下执行此操作。它必须是纯脚本。

python 中是否有可用的模块可以帮助我做到这一点?
谢谢

【问题讨论】:

标签: python browser-automation


【解决方案1】:

selenium 会做你想做的事,它会处理 javascript

【讨论】:

  • 虽然我不认为这可以无头完成,这通常是“纯脚本”所暗示的,但这将尽可能地模拟真实的浏览器体验......因为它使用真正的浏览器。今天大多数网站在没有 Javascript 的情况下完全崩溃,这使得机械化过时了。
  • 这是错误的..您可以使用 Pyvirtual 显示轻松伪造浏览器以在无头模式下运行带有 selenium 的 python..
  • http://www.seleniumhq.org/docs/03_webdriver.jsp#htmlunit-driver。另请参阅https://github.com/detro/ghostdriver。这两个都是用于headles javascript。第一个是官方的,第二个是第三方的。
【解决方案2】:

您也可以查看mechanize。它旨在处理“有状态的程序化网页浏览”(根据他们的网站)。

【讨论】:

  • 机械化,根据我的经验,速度很慢,但是一旦涉及到 https、cookie、登录,它比 urllib2容易
  • selenium 提供的不仅仅是 mechanize,但 mechanize 仅适用于基本的东西,但如果您尝试进行真正的浏览器仿真会导致问题,因为它不执行自动下载图像、css 文件等操作等,并且似乎总是可以被最严格的网站检测为自动化工具
  • 很遗憾,mechanize 不再维护,并且不支持 Python 3。
  • 截至 2017 年 3 月,维护已由其他人接管,并且确实支持 Python 3:github.com/python-mechanize/mechanize
【解决方案3】:

我认为最好的解决方案是requestsBeautifulSoup 的组合,我只是想更新问题以便它可以保持更新。

【讨论】:

    【解决方案4】:

    所有答案都是旧的,我推荐,我是requests 的忠实粉丝

    从主页:

    Python 的标准 urllib2 模块提供了大部分 HTTP 您需要的功能,但 API 已被彻底破坏。它建于 不同的时间——不同的网络。它需要一个巨大的 执行最简单的工作量(甚至方法覆盖) 任务。

    事情不应该是这样的。不在 Python 中。

    【讨论】:

      【解决方案5】:

      Selenium http://www.seleniumhq.org/ 对我来说是最好的解决方案。您可以使用 python、java 或任何您喜欢的编程语言轻松对其进行编码。和简单的模拟转换成程序。

      【讨论】:

        【解决方案6】:

        有很多内置的 python 模块可以帮助解决这个问题。例如urllibhtmllib

        如果你改变处理问题的方式,问题会更简单。您说您要“填写一些表格,单击提交按钮,将数据发送回服务器,接收响应”,这听起来像是一个四个阶段的过程。

        实际上,您需要做的是将一些数据发布到网络服务器并获得响应。

        这很简单:

        >>> import urllib
        >>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
        >>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
        >>> print f.read()
        

        (取自 urllib 文档的示例)。

        您对响应的处理取决于 HTML 的复杂程度以及您想要对其执行的操作。您可能会使用一两个正则表达式来解析它,或者您可以使用 htmllib.HTMLParser 类,或者可能是更高级别更灵活的解析器,例如 Beautiful Soup

        【讨论】:

          【解决方案7】:

          Selenium2包含webdriver,它有python bindings,允许使用无头htmlUnit驱动,或者切换到firefox或chrome进行图形调试。

          【讨论】:

            【解决方案8】:

            不要忘记zope.testbrowser,它是mechanize 的包装。

            zope.testbrowser 提供了一个易于使用的可编程网络浏览器,特别注重测试。

            【讨论】:

              【解决方案9】:

              我发现(目前正在实施)的最佳解决方案是: - 在 python 中使用 selenium webdriver 的脚本 - PhantomJS 无头浏览器(如果使用 firefox,您将有一个 GUI,并且会更慢)

              【讨论】:

                【解决方案10】:

                我发现iMacros Firefox plugin(免费)很好用。

                它可以通过 Python 使用 Windows COM 对象接口实现自动化。这是来自http://wiki.imacros.net/Python 的一些示例代码。它需要Python Windows Extensions:

                import win32com.client
                def Hello():
                    w=win32com.client.Dispatch("imacros")
                    w.iimInit("", 1)
                    w.iimPlay("Demo\\FillForm")
                if __name__=='__main__':
                    Hello()
                

                【讨论】:

                • 这只适用于windows机器吗?
                • 是的,据我所知,任何使用 win32 库的东西都只能在 Windows 上运行。
                【解决方案11】:

                您可能想要urllib2。它可以处理诸如 HTTPS、cookie 和身份验证之类的事情。您可能还希望 BeautifulSoup 帮助解析 HTML 页面。

                【讨论】:

                  【解决方案12】:

                  您可以查看last italian pycon (pdf) 中的这些幻灯片: 作者列出了大部分用于在 python 中进行抓取和自动浏览的库。所以你可以看看它。

                  我非常喜欢twill(已经推荐过),它是由nose 的一位作者开发的,专门用于测试网站。

                  【讨论】:

                    【解决方案13】:

                    特定于 Internet Explorer,但相当不错:

                    http://pamie.sourceforge.net/

                    与 urllib/BeautifulSoup 相比的优势在于它使用 IE 也能执行 Javascript。

                    【讨论】:

                      【解决方案14】:

                      httplib2 + 美丽的汤

                      使用 firefox + firebug + httpreplay 查看 javascript 从网站传入和传出浏览器的内容。使用 httplib2,你基本上可以通过 post 和 get 来做同样的事情

                      【讨论】:

                        【解决方案15】:

                        对于自动化,你肯定想看看

                        网络机器人

                        它基于 selenium,并提供更多功能,只需很少的代码,例如自动查找元素以执行单击、基于参数键入等操作。

                        它甚至适用于类名和 id 动态变化的网站。

                        这里是文档:https://webbot.readthedocs.io/

                        【讨论】:

                          猜你喜欢
                          • 2014-02-06
                          • 2020-12-08
                          • 2017-03-02
                          • 2014-02-06
                          • 2016-09-14
                          • 1970-01-01
                          • 2013-09-03
                          • 2019-04-04
                          • 2012-04-24
                          相关资源
                          最近更新 更多