瀏覽器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內容的函數??茨禽v車 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是與所有其他參數(如果提供)匹配的第一個窗體;它不一定是窗體中的第一個控件?!叭直韱巍保ㄓ晌窗谌魏伪韱卧刂械乃斜韱慰丶M成)被認為不屬于此序列的一部分并且沒有名稱,因此除非名稱和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() 方法。您還可以通過 context 關鍵字參數。請注意,要使用此功能,必須使用python>=2.7.9。此外,您還可以直接通過預建 ssl.SSLContext 作為 context 參數。

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”] )

如果由于傳遞了一個未知方案而失?。◣в衯alueerror),則不會更改已處理的方案集。

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字符串之外,您只需指定 name , value , domain 以及可選的 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 -- 與此請求一起發送的數據??梢允菍⒈痪幋a并作為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。