已知问题:
- 代理ip 时而失效
- 每个页面加载完成后关闭当前页面,若多进程开启多个窗口,会等所有窗口都加载完才会关闭所有页面
其他参考:
https://github.com/ynyyn/Miniblink-Python-SimpleDemo https://github.com/lochen88/MBPython3
mini.py
import ctypes, ctypes.wintypes
from ctypes import *
import threading
import multiprocessing
import time
class wkeProxy(Structure):
_fields_ = [('type', c_int),('hostname', c_char *100),('port', c_ushort ),('username', c_char *50),('password',c_char *50)]
def run(url):
webview = mb = None
mb = ctypes.cdll.LoadLibrary('node.dll')
mb.wkeInitialize()
webview = mb.wkeCreateWebWindow(
0, # WKE_WINDOW_TYPE_POPUP
None, 0, 0,
1024, 768 # width, height
)
mb.wkeMoveToCenter(webview)
mb.wkeSetWindowTitleW(webview, "Miniblink Python")
# mb.wkeOnWindowClosing(webview, handleWindowClosing, 0)
# 窗口销毁时回调
mb.wkeOnWindowDestroy(webview, handleWindowDestroy, 0)
mb.wkeShowWindow(webview, True)
mb.wkeLoadURLW(webview, url)
# 页面加载完成后回调
mb.wkeOnLoadingFinish(webview,onLoadingFinish,0)
# 设置代理ip
proxy = set_webview_proxy('1.1.1.1',8088,proxy_type=4,user=None,password=None)
mb.wkeSetViewProxy(webview,byref(proxy))
msg = ctypes.wintypes.MSG()
lpMsg = ctypes.byref(msg)
while ctypes.windll.user32.GetMessageW(lpMsg, 0, 0, 0) > 0:
ctypes.windll.user32.TranslateMessage(lpMsg)
ctypes.windll.user32.DispatchMessageW(lpMsg)
@CFUNCTYPE(None,c_int,c_void_p,c_void_p,c_int,c_void_p)
def onLoadingFinish(webview,param,url,result,fAIledReason):
webview = None
ctypes.windll.user32.PostQuitMessage(0)
@CFUNCTYPE(None, c_int, c_void_p)
def handleWindowDestroy(webView, param):
webview = None
ctypes.windll.user32.PostQuitMessage(0)
#设置指定webview的代理
def set_webview_proxy(ip,port,proxy_type=1,user=None,password=None):
# proxy_type={
# 0:WKE_PROXY_NONE,
# 1:WKE_PROXY_HTTP,
# 2:WKE_PROXY_SOCKS4,
# 3:WKE_PROXY_SOCKS4A,
# 4:WKE_PROXY_SOCKS5,
# 5:WKE_PROXY_SOCKS5HOSTNAME}
# ip='49.87.18.53'
# port=4221
if user==None:
user=b''
else:
user=user.encode('utf8')
if password==None:
password=b''
else:
password=password.encode('utf8')
ip=ip.encode('utf8')
port=int(port)
# _fields_ = [('type', c_int),('hostname', c_char *100),('port', c_ushort ),('username', c_char *50),('password',c_char *50)]
proxy= wkeProxy(type=c_int(proxy_type), hostname=ip, port=c_ushort(port),username=user,password=password)
return proxy
if __name__ == '__main__':
url_list = []
with open('urls.txt','r') as f:
for line in f:
url_list.append(line.strip('\n'))
# while True:
pool = multiprocessing.Pool(processes=1)
for url in url_list:
pool.apply_async(run,(url,))
# print(url)
# run(url)
pool.close()
pool.join()
print('ok')
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)