浏览器API

mechanize 的API文件 Browser 对象。您可以创建mechanize Browser 实例为:

from mechanize import Browser
br = Browser()

浏览器

class mechanize.Browser(history=None, request_class=None, content_parser=None, factory_class=<class 'mechanize._html.Factory'>, allow_xhtml=False)[源代码]

类似浏览器的类,支持历史记录、表单和链接。

BrowserStateError 每当浏览器处于错误状态以完成请求的操作时(例如,当 back() 当浏览器历史记录为空或 follow_link() 当当前响应不包含HTML数据时调用。

公共属性:

请求:当前请求 (mechanize.Request

窗体:当前选定的窗体(请参见 select_form()

参数:
  • history -- 对象实现 mechanize.History 接口。注意,这个接口仍然是实验性的,将来可能会改变。此对象归浏览器实例所有,不能在浏览器之间共享。

  • request_class -- 请求类使用。默认为 mechanize.Request

  • content_parser -- 负责解析接收到的HTML/XHTML内容的函数。看那辆车 mechanize._html.content_parser() 函数获取有关此函数必须支持的接口的详细信息。

  • factory_class -- 要使用的HTML工厂类。默认为 mechanize.Factory

add_client_certificate(url, key_file, cert_file)

为HTTPS客户端身份验证添加一个SSL客户端证书。

密钥文件和证书文件必须是PEM格式的密钥和证书文件的文件名。您可以使用openssl将p12(pkcs 12)文件转换为pem格式:

openssl pkcs12-clcerts-nokeys-in cert.p12-out cert.pem openssl pkcs12-nocerts-in cert.p12-out key.pem

注意,客户端证书密码输入是非常不灵活的ATM。目前,这似乎只是控制台,这可能是libopenssl的默认行为。将来,mechanize可能支持第三方库(我假设)在这里允许更多选项。

back(n=1)[源代码]

返回历史中的n个步骤,并返回响应对象。

n:返回此步骤数(默认为1步)

click(*args, **kwds)[源代码]

mechanize.HTMLForm.click() 文件。

找到一个链接并返回它的请求对象。

论据是关于 find_link() ,但可以将链接作为第一个参数提供。

property cookiejar

返回当前的烹饪罐 (mechanize.CookieJar )或者没有

在当前页面中查找链接。

链接返回为 mechanize.Link 物体。示例:

# Return third link that .search()-matches the regexp "python" (by
# ".search()-matches", I mean that the regular expression method
# .search() is used, rather than .match()).
find_link(text_regex=re.compile("python"), nr=2)

# Return first http link in the current page that points to
# somewhere on python.org whose link text (after tags have been
# removed) is exactly "monty python".
find_link(text="monty python",
        url_regex=re.compile("http.*python.org"))

# Return first link with exactly three HTML attributes.
find_link(predicate=lambda link: len(link.attrs) == 3)

链接包括锚定 <a> ,图像映射 <area> ,和框架 <iframe> .

所有参数必须通过关键字传递,而不是位置传递。可以提供零个或多个参数。为了找到链接,提供的所有参数都必须匹配。

如果找不到匹配的链接, mechanize.LinkNotFoundError 提高了。

参数:
  • text -- 链接标记之间的链接文本:例如,<a href=“blah”>this bit</a>with whitespace compressed.

  • text_regex -- 标记(如上定义)之间的链接文本必须与作为此参数传递的正则表达式对象或正则表达式字符串匹配(如果提供)

  • name -- 对于文本和文本,但与链接标记的name html属性匹配

  • url -- 对于文本和文本,但与链接标记的URL匹配(请注意,这与link.url匹配,后者是相对或绝对的URL,根据其在HTML中的写入方式)

  • tag -- 开口标签的元素名称,例如“A”

  • predicate -- 将链接对象作为其单个参数的函数,返回布尔结果,指示链接是否

  • nr -- 匹配匹配所有其他条件的第n个链接(默认为0)

找到一个链接并 open() 它。

论据是关于 click_link() .

返回值与 open() .

forms()[源代码]

在窗体上返回ITable。

返回的表单对象实现 mechanize.HTMLForm 接口。

geturl()[源代码]

获取当前文档的URL。

global_form()[源代码]

返回全局表单对象,如果工厂实现未提供全局表单对象,则返回“无”。

“global”表单对象包含不是任何表单元素后代的所有控件。

返回的窗体对象实现 mechanize.HTMLForm 接口。

这是一个单独的方法,因为全局表单不被视为文档中表单序列的一部分——主要是为了向后兼容。

通过链接返回iterable (mechanize.Link 对象)。

open(url_or_request, data=None, timeout=<object object>)[源代码]

打开一个URL。加载页面,以便以后可以使用 forms()links() 等等。

参数:
  • url_or_request -- URL或 mechanize.Request

  • data (dict) -- 要与POST请求一起发送的数据

  • timeout -- 超时(秒)

返回:

A mechanize.Response 对象

open_novisit(url_or_request, data=None, timeout=<object object>)[源代码]

打开一个URL而不访问它。

通过调用此函数,浏览器状态(包括请求、响应、历史记录、表单和链接)保持不变。

接口与 open() .

这对获取图像等操作很有用。

也见 retrieve()

reload()[源代码]

重新加载当前文档,并返回响应对象。

response()[源代码]

返回当前响应的副本。

返回的对象与返回的对象具有相同的接口 open()

retrieve(fullurl, filename=None, reporthook=None, data=None, timeout=<object object>, open=<built-in function open>)

返回(文件名,头)。

对于远程对象,默认文件名将引用临时文件。调用openerDirector.close()方法时会删除临时文件。

对于file:urls,当前返回的文件名为none。这在将来可能会改变。

如果实际读取的字节数小于Content-Length头所指示的字节数,则会引发ContentToSortError(URLError子类)。异常的.result属性包含本应返回的(文件名、头)。

select_form(name=None, predicate=None, nr=None, **attrs)[源代码]

选择要输入的HTML表单。

这有点像在浏览器中为窗体提供“输入焦点”。

如果选择了表单,浏览器对象支持HTMLForm接口,因此可以调用类似 set_value()set()click() .

选择表单的另一种方法是分配给.form属性。分配的表单应该是 forms() 方法。

如果找不到匹配的表单, mechanize.FormNotFoundError 提高了。

如果 name 指定了,则表单必须具有指定的名称。

如果 predicate 指定了,则窗体必须与该函数匹配。谓词函数通过 mechanize.HTMLForm 作为它的单个参数,应该返回一个布尔值,指示窗体是否匹配。

nr 如果提供,则为表单的序列号(其中0是第一个)。请注意,控件0是与所有其他参数(如果提供)匹配的第一个窗体;它不一定是窗体中的第一个控件。“全局表单”(由未包含在任何表单元素中的所有表单控件组成)被认为不属于此序列的一部分并且没有名称,因此除非名称和nr均为“无”,否则将不匹配。

您还可以匹配 <form> 通过将属性名和值作为关键字参数传入来标记。要将HTML属性转换为语法上有效的python关键字参数,使用以下简单规则。python关键字参数名通过以下方式转换为HTML属性名:用连字符替换所有下划线,并删除所有尾随的下划线。可以将字符串、函数或正则表达式对象作为要匹配的值传递。例如:

# Match form with the exact action specified
br.select_form(action='http://foo.com/submit.php')
# Match form with a class attribute that contains 'login'
br.select_form(class_=lambda x: 'login' in x)
# Match form with a data-form-type attribute that matches a regex
br.select_form(data_form_type=re.compile(r'a|b'))
set_ca_data(cafile=None, capath=None, cadata=None, context=None)

设置用于连接到SSL服务器的SSL上下文。

此方法接受与 ssl.SSLContext.load_verify_locations() 方法从Python标准库中获取。您还可以传递一个预置的 ssl.SSLContext 通过 context 关键字参数。请注意,要使用此功能,您必须使用>=2.7.9的Python。

set_client_cert_manager(cert_manager)

设置mechanical.httpclientcertmgr或无。

设置一个cookie。

注意,在通常情况下不需要调用此方法:通常情况下,cookie处理是完全自动的。预期的用例更倾向于通过网页中的客户端脚本(例如javascript)模拟cookie的设置。在这种情况下,需要使用此方法,因为mechanize当前不支持JavaScript、VBScript等。

作为当前请求的结果,cookie的添加方式与当前响应到达时的添加方式相同。这意味着,例如,如果不适合基于当前请求设置cookie,则不会设置cookie。

在适当的时候,cookie将自动返回,随后由浏览器实例做出响应。

cookie_字符串应该是set cookie头的有效值。

例如:

browser.set_cookie(
    "sid=abcdef; expires=Wednesday, 09-Nov-06 23:12:40 GMT")

目前,此方法不允许添加RFC2986 cookie。如果有人要求,这个限制将被解除。

也见 set_simple_cookie() 无需创建set cookie头字符串即可轻松设置cookie。

set_cookiejar(cookiejar)

设置一个mechanize烹饪罐,或不设置。

set_debug_http(handle)

将HTTP头打印到sys.stdout。

set_debug_redirects(handle)

有关HTTP重定向(包括刷新)的日志信息。

使用模块日志记录执行日志记录。记录器名称为 "mechanize.http_redirects" .要实际打印一些调试输出,例如:

import sys, logging
logger = logging.getLogger("mechanize.http_redirects")
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.INFO)

与此模块相关的其他记录器名称:

  • mechanize.http_responses

  • mechanize.cookies

打开所有设备:

import sys, logging
logger = logging.getLogger("mechanize")
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.INFO)
set_debug_responses(handle)

记录HTTP响应主体。

set_debug_redirects() 有关日志记录的详细信息。

如果设置了此项,则响应对象可以是.seek()(当前返回的响应是,引发的httperror异常响应不是)。

set_handle_equiv(handle, head_parser_class=None)

设置是否将HTML HTTP EQUIV头视为HTTP头。

如果设置了此项,则响应对象可以是.seek()(当前返回的响应是,引发的httperror异常响应不是)。

set_handle_gzip(handle)

向服务器添加头,指示我们处理gzip内容编码。请注意,如果服务器发送gzip的内容,在任何情况下都会自动处理它,而不考虑此设置。

set_handle_redirect(handle)

设置是否处理HTTP 30X重定向。

set_handle_referer(handle)[源代码]

设置是否向每个请求添加引用头。

set_handle_refresh(handle, max_time=None, honor_time=True)

设置是否处理HTTP刷新头。

set_handle_robots(handle)

设置是否遵守robots.txt中的规则。

set_handled_schemes(schemes)

设置URL方案(协议)字符串的序列。

例如:ua.set_handled_schemes( [“http”,“ftp”] )

如果由于传递了一个未知方案而失败(带有valueerror),则不会更改已处理的方案集。

set_header(header, value=None)[源代码]

设置标题值的方便方法 self.addheaders 以便自动发送带有所有请求的头。

参数:
  • header -- 头名称,例如用户代理

  • value -- 标题值。如果设置为“无”,则会删除收割台。

set_html(html, url='http://example.com/')[源代码]

使用给定的HTML和URL(如果给定)将响应设置为dummy。

允许您随后解析该HTML,特别是提取表单信息。如果没有指定URL,则默认值为“example.com网站".

set_password_manager(password_manager)

设置mechanize.httppasswordmgrwithdefaultrealm或无。

set_proxies(proxies=None, proxy_bypass=None)

配置代理设置。

参数:
  • proxies -- 字典将URL方案映射到代理规范。无表示使用默认的系统特定设置。

  • proxy_bypass -- 函数获取主机名,返回是否应使用代理。无表示使用默认的系统特定设置。

默认设置是尝试从系统获取代理设置(有关所使用的系统特定方法的信息,请参阅urlib.urlopen的文档--请注意,这是urlib,而不是urlib2)。

要避免所有使用代理,请传递空代理dict。

>>> ua = UserAgentBase()
>>> def proxy_bypass(hostname):
...     return hostname == "noproxy.com"
>>> ua.set_proxies(
...     {"http": "joe:password@myproxy.example.com:3128",
...      "ftp": "proxy.example.com"},
...     proxy_bypass)
set_proxy_password_manager(password_manager)

设置mechanize.httpproxypasswordmgr或无。

set_request_gzip(handle)

向服务器添加头,指示我们处理gzip内容编码。请注意,如果服务器发送gzip的内容,在任何情况下都会自动处理它,而不考虑此设置。

set_response(response)[源代码]

将当前响应替换为响应(副本)。

响应可能为“无”。

这主要用于HTML预处理。

类似 set_cookie() 除了使用cookie字符串之外,您只需指定 namevaluedomain 以及可选的 path .创建的cookie将永不过期。例如:

browser.set_simple_cookie('some_key', 'some_value', '.example.com',
                          path='/some-page')
submit(*args, **kwds)[源代码]

提交当前表单。

论据是关于 mechanize.HTMLForm.click() .

返回值与 open() .

title()[源代码]

返回标题,如果文档中没有标题元素,则返回无标题。

viewing_html()[源代码]

返回当前响应是否包含HTML数据。

visit_response(response, request=None)[源代码]

访问响应,就好像 open() 预计起飞时间。

不像 set_response() ,这将更新历史记录,而不是替换当前响应。

请求

class mechanize.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, visit=None, timeout=<object object>, method=None)[源代码]

对某些网络资源的请求。请注意,如果您将方法指定为“get”,将数据指定为dict,那么它将自动附加到URL。如果将方法保留为“无”,则该方法将自动设置为Post,数据将成为Post请求的一部分。

参数:
  • url (str) -- 请求的URL

  • data -- 与此请求一起发送的数据。可以是将被编码并作为application/x-www-form-urlencoded数据发送的字典,也可以是将按原样发送的bytestring。如果使用bytestring,还应该适当地设置content-type头。

  • headers (dict) -- 要与此请求一起发送的邮件头

  • method (str) -- 用于HTTP请求的方法。如果未指定,mechanize将根据需要选择“自动获取”或“自动发布”。

  • timeout (float) -- 超时(秒)

其余参数供内部使用。

add_data(data)

设置与此请求一起发送的数据(字节串)

add_header(key, val=None)[源代码]

如果需要,添加指定的头,替换现有的头。如果VAL为“无”,则拆下收割台。

add_unredirected_header(key, val)[源代码]

等同于 add_header() 但对于重定向的请求,不会发送此头。

get_data()[源代码]

与此请求一起发送的数据

get_header(header_name, default=None)[源代码]

获取指定头的值。如果不在,返回 default

get_method()[源代码]

用于HTTP请求的方法

has_data()[源代码]

真的,如果有一些数据要与此请求一起发送

has_header(header_name)[源代码]

检查指定的头是否存在

has_proxy()[源代码]

私有方法。

header_items()[源代码]

获取此请求的所有头的副本,作为2个元组的列表

set_data(data)[源代码]

设置与此请求一起发送的数据(字节串)

回答

mechanize中的响应对象是 seek() 能够的 file -类似于支持一些附加方法的对象,这取决于用于连接的协议。下面的文档是针对HTTP(S)响应的,因为它们是最常见的。

HTTP响应的其他方法:

class mechanize._mechanize.HTTPResponse
code

HTTP状态代码

getcode()

返回HTTP状态代码

geturl()

返回检索到的资源的URL,通常用于确定是否遵循了重定向。

get_all_header_names(normalize=True)

返回所有标题名称的列表。什么时候? normalizeTrue ,头名称的大小写是规范化的。

get_all_header_values(name, normalize=True)

返回指定头的所有值的列表 name (不区分大小写。由于HTTP中的头可以多次指定,因此返回的值始终是一个列表。参见 rfc822.Message.getheaders() .

info()

将响应的头作为返回 rfc822.Message 实例。

__getitem__(header_name)

返回 last 将指定名称作为字符串匹配的HTTP头。mechanize响应对象的作用类似于字典,便于访问头值。例如: response['Date'] .您可以使用头名称(不区分大小写)访问头值。请注意,当存在多个具有相同名称的头时,只返回最后一个头的值,请使用 get_all_header_values() 获取所有头的值。

get(header_name, default=None):

返回指定的头值 header_name or default if the header is not present. See _ _getitem__().

其他

HTML文档中的链接

变量:
  • absolute_url -- 绝对链接URL

  • url -- 链接URL

  • base_url -- 用于解析此链接的基URL

  • text -- 链接文本

  • tag -- 链接标记名称

  • attrs -- 标签属性

class mechanize.History[源代码]

尽管这将成为公共的,但隐含的接口还不稳定。

mechanize._html.content_parser(data, url=None, response_info=None, transport_encoding=None, default_encoding='utf-8', is_html=True)[源代码]

将数据(字节对象)解析为ETree表示形式,例如 xml.etree.ElementTreelxml.etree

参数:
  • data (bytes) -- 要分析的数据

  • url -- 正在分析的文档的URL或无

  • response_info -- 有关文档的信息(包含所有HTTP头作为 HTTPMessage

  • transport_encoding -- 正在分析的文档的字符编码,如HTTP头中指定的或无。

  • default_encoding -- 如果检测不到编码且未指定传输编码,则使用的字符编码

  • is_html -- 如果要将文档解析为HTML。