起源 parent 与 opener 在说 opener 之前,可以先聊聊 中的 parent。...opener 与 parent 一样,只不过是用于 在新标签页打开的页面的。...通过 打开的页面,可以直接使用 window.opener 来访问来源页面的 window 对象。...同域与跨域 浏览器提供了完整的跨域保护,在域名相同时, parent 对象和 opener 对象实际上就直接是上一级的 window 对象;而当域名不同时, parent 和 opener 则是经过包装的一个...但是与 parent 不同的是,在跨域的情况下, opener 仍然可以调用 location.replace 方法而 parent 则不可以。
1.Openers: 当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。 正常情况下,我们使用默认opener:通过urlopen。...如果你希望用特定处理器获取URLs你会想创建一个openers,例如获取一个能处理cookie的opener,或者获取一个不重定向的opener。...同样,可以使用build_opener,这是一个更加方便的函数,用来创建opener对象,他只需要一次函数调用。...install_opener 用来创建(全局)默认opener。这个表示调用urlopen将使用你安装的opener。 Opener对象有一个open方法。...说完了上面两个内容,下面我们来看一下基本认证的内容,这里会用到上面提及的Opener和Handler。
但是,在子页面访问 opener.location 的一些属性和方法时却不受 SOP 保护,这就是本文要探讨问题的核心所在。...)通过给链接加上 rel=noreferrer 属性,将 opener 置为空。...,'_blank');win.opener=null;return false;">click meopener.html...于是,一些人开始提出各种建议,试图让浏览器既能保留 Referrer,又能阻断 opener 引用。...:建议在 CSP3 中增加 disown-window-opener 指令,详情; 到这里为止,我们讨论的都是「新窗口打开的子页面将父页面跳走」所带来的风险。
Handler和Opener Handler处理器和自定义Opener opener是urllib2.OpenerDirector的实例,我们之前一直在使用urlopen,它是一个特殊的opener(也就是我们构建好的...如果程序里所有的请求都使用自定义的opener,可以使用urllib2.install_open()将自定义的opener对象定义为全局opener,表示如果之后凡是调用urlopen,都将使用这个opener...http_handler = urllib2.HTTPHandler() # 调用build_opener()方法构建一个自定义的opener对象,参数是构建的处理器对象 opener = urllib2...opener = urllib2.build_opener(cookie_handler) # 通过自定义opener的addheaders的参数,可以添加HTTP报头参数 opener.addheaders...opener = urllib2.build_opener(cookie_handler) # 通过自定义opener的addheaders的参数,可以添加HTTP报头参数 opener.addheaders
Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构建好的...如果程序里所有的请求都使用自定义的opener,可以使用urllib2.install_opener() 将自定义的 opener 对象 定义为 全局opener,表示如果之后凡是调用urlopen,都将使用这个...通过 build_opener()方法使用这些代理Handler对象,创建自定义opener对象,参数包括构建的 proxy_handler opener = urllib2.build_opener(...可以选择通过install_opener()方法定义opener为全局opener urllib2.install_opener(opener) # 6....() 来构建opener opener = urllib2.build_opener(handler) # 4.
在前面两篇文章 《urllib2源码解读二(简单的urlopen)》 和 《urllib2源码解读三》 中已经构造了一个opener了,我分析的过程看起来比较麻烦,其实理解之后发现也就那些逻辑罢了。...有了这个opener之后,我们就可以用它来打开/读取url。整个过程都在opener.open(url)这个函数中。 这个函数的流程是清晰的,接受三个参数:fullurl,data,timeout。
如果程序里所有的请求都使用自定义的opener对象,可以使用urllib2.install_opener()将自定义的opener对象定义为全局opener,表示如果之后凡是调用urlopen,都将使用这个...,就是opener应用到全局,之后所有的,不管是opener.open()还是urlopen()发送请求,都将使用自定义代理 # urllib2.install_opener(opener) # response...通过build_opener()方法使用代理handler对象,创建自定义opener对象,参数包括构建的proxyauth_handler opener = urllib2.build_opener(...) #5.可以选择通过install_opener()方法定义全局opener urllib2.install_opener(opener) #6.构建request对象 request = urllib2...()对象来构建opener opener = build_opener(handler) #创建一个请求,原理同urllib2的urlopen response = opener.open("http
= urllib.request.build_opener() opener.addheaders = [headers] urllib.request.install_opener(...opener) html = opener.open(url).read().decode('utf8') ip_port_list = re.findall(r'opener() opener.addheaders = [headers] urllib.request.install_opener(...opener) html = opener.open(url).read().decode('utf8') ip_port_list = re.findall(r'opener(proxy_jj,urllib.request.HTTPHandler) urllib.request.install_opener
这个代理设置非常简单,先调用 ProxyHandler 的构造函数,参数传入代理字典,创建一个代理对象;然后调用 build_opener 函数,参数传入之前创建的代理对象,创建一个 opener 对象...;最后调用 install_opener,参数传入之前创建的 opener 对象,把之前的 opener 对象应用于全局(ProxyHandler、build_opener、install_opener...代码如下: from sklearn.datasets import fetch_lfw_people from urllib.request import ProxyHandler, build_opener..., install_opener install_opener(build_opener(ProxyHandler({'http': 'socks5://localhost:1080', 'https
需要在打开浏览器后, 获取浏览器的command_executor url, 以及session_id opener.command_executor...._url, opener.session_id #opener为webdriver对象 之后通过remote方式链接 from selenium import webdriver opener = webdriver.Remote...(command_executor=_url,desired_capabilities={}) #_url为上面的_url opener.close() #这时会打开一个全新的浏览器对象, 先把新的关掉...opener.session_id = session_id #session_id为上面的session_id 之后对opener的任何操作都会反映在之前的浏览器上. selenium 的 desired_capabilities...() 写入cookies opener.add_cookie(cookie) #需要先访问该网站产生cookies后再进行覆写 selenium 等待页面所有异步函数完成 opener.implicitly_wait
,创建自定义opener对象; 使用自定义的opener对象,调用open()方法发送请求。...如果程序里所有的请求都使用自定义的opener,可以使用urllib.resquest.install_opener() 将自定义的 opener 对象 定义为 全局opener,表示如果之后凡是调用urlopen...,都将使用这个opener(根据自己的需求来选择) 简单的自定义opener() 1 #!...通过 build_opener()方法使用这些代理Handler对象,创建自定义opener对象,参数包括构建的 proxy_handler 20 opener = urllib.request.build_opener...可以选择通过install_opener()方法定义opener为全局opener 23 urllib.request.install_opener(opener) 24 25 # 6.
会返回一个OpenerDirector对象,关于urllib2.build_opener类下面再说): import urllib2 opener = urllib2.build_opener() opener.addheaders...3) urllib2.install_opener(opener)和urllib2.build_opener([handler, ...]) ...install_opener(opener) f = opener.open(req) 如上使用 urllib2.install_opener()设置 urllib2 的全局 opener。...install_opener如上所述也能用于创建一个opener对象,但是这个对象是(全局)默认的opener。这意味着调用urlopen将会用到你刚创建的opener。...这段代码最终还是使用的默认opener。一般情况下我们用build_opener为的是生成自定义opener,没有必要调用install_opener,除非是为了方便。
① 定义 opener opener 是 urllib.request.OpenerDirector 类的对象,urlopen 就是模块构建的一个 opener,但是它不支持代理、Cookie 等其它的...通过 urllib.request.build_opener() 方法使用这些处理器对象创建自定义到的 opener 对象。 使用自定义的 opener 对象,调用 open() 方法发送请求。...这里需要注意的是,如果程序中所有的请求都使用自定义的 opener,可以使用 urllib2.install_opener() 将自定义的 opener 对象定义为全局 opener,表示之后凡是调用...() 方法,创建支持处理 HTTP 请求的 opener 对象 opener = urllib.request.build_opener(http_handler) # 构建 Request 请求 request...= urllib.request.build_opener(httpproxy_handler) else: opener = urllib.request.build_opener(nullproxy_handler
_GLOBAL_DEFAULT_TIMEOUT): """ 对外的访问函数 """ global _opener if _opener is None:..._opener = build_opener() return _opener.open(url, data, timeout) 在程序第一次执行urlopen操作的时候,其实就是构建了一个全局的..._opener对象,然后用这个_opener对象来处理url以及data。...当然这个opener也不是一次加载就再也不可变了,urllib2提供了install_opener这个方法,你可以在客户端调用build_opener然后用前面的那个install_opener来加载。...这段代码很简单,起作用就是构建一个opener对象,所以咱来看下它是如何构建这个_opener对象的。 不过在此之前需要先了解下我们一直在说的opener是什么?
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) # 获取cookie req=urllib2.Request(auth_url...,post_data,headers) result = opener.open(req) # 访问主页 自动带着cookie信息 iresult = opener.open(home_url) # 显示结果...opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) req = urllib2.Request(auth_url, ...=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) urllib2.install_opener(opener) response=urllib2...=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) urllib2.install_opener(opener)
使用request.build_opener方法来进行构造opener,将我们想要传递的cookie配置到opener中,然后使用这个opener的open方法来发起请求。...对象 opener = request.build_opener(cookies) # 使用这个opener来发起请求 resp = opener.open(url) # 查看之前的cookie...方法发起请求时,都会带上这个cookie: # 将这个opener设置为全局的opener request.install_opener(opener) resp = request.urlopen(url...对象 opener = request.build_opener(proxies) resp = opener.open(url) print(resp.read().decode()) (7)下载数据到本地...ehopper') opener = urllib2.build_opener(auth_handler) urllib2.install_opener(opener) urllib2.urlopen(
= build_opener(auth_handler) try: ret = opener.open(url) html = ret.read().decode('utf8') ... = build_opener(proxy_handler) try: response = opener.open('https://www.baidu.com') print(response.read...()方法构造一个Opener,之后发送请求即可。... = urllib.request.build_opener(handler) response = opener.open('http://www.baidu.com') for item in cookie... = urllib.request.build_opener(handler) response = opener.open('http://www.baidu.com') print(response.read
= {'http':'52.187.162.198:3128'} 创建ProxyHeader proxyHeader = request.ProxyHandler(proxy) 创建Opener...opener = request.build_opener(proxyHeader) 安装Opener request.install_opener(opener) 示例 from...proxy = {'http':'52.187.162.198:3128'} # 创建ProxyHeader proxyHeader = request.ProxyHandler(proxy) # 创建Opener...opener = request.build_opener(proxyHeader) # 安装Opener request.install_opener(opener) # 然后剩下的就跟正常使用差不多
对象 8 opener = urllib.request.build_opener() 9 opener.addheaders = [headers] 10 # (1)直接使用opener进行爬虫...11 data = opener.open(url).read() 12 # print(data) 13 print(len(data)) 14 # (2)将opener安装为全局,全局生效后,再使用...urlopen 15 urllib.request.install_opener(opener) 16 data = urllib.request.urlopen(url).read() 17 print...对象 5 opener = urllib.request.build_opener() 6 opener.addheaders = headers.items() #header.items()...[(key1,value1),(key2,value2),(key3,value3)] 7 # (1)直接使用opener进行爬虫 8 data = opener.open(url).read()
要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象。 ? ... = urllib2.build_opener(handler) urllib2.install_opener(opener) 2.3 代理 urllib2会自动检测代理设置,默认使用环境变量... = urllib2.build_opener(proxy_handler) else: opener = urllib2.build_opener(null_proxy_handler) ...urllib2.install_opener(opener) 这里要注意的一个细节,使用 urllib2.install_opener() 会设置 urllib2 的全局 opener。... =urllib2.build_opener(httpHandler, httpsHandler) urllib2.install_opener(opener) response = urllib2
领取专属 10元无门槛券
手把手带您无忧上云