呼叫审核大大,能先给我通过,然后我慢慢编辑发个完整的到编码板块去,主要是不想造两遍轮子~~
目前完成了个头,语文水平有限,写的东西经常自己回头看发现看不懂,所以还在考虑怎么写,贴个总体设计
还有个已经写好的模块,也先放上来吧。
1.使用selenium模块,每个人chrome版本不同,所以用程序自动获取对应版本的chromedriver.exe。
2.封装一些创建chromediver对象的参数进去,主要是想简单的通过一个参数控制是否显示网页窗口。
[Python] 纯文本查看 复制代码 # selenium配套模块,用来检验chromedriver是否匹配,下载匹配的chromdriver
import winreg
import os
import urllib
import urllib.request
import winreg
import re
import sys
import zipfile
from selenium import webdriver
from selenium.common.exceptions import WebDriverException
def unzip_single(src_file, dest_dir, password=None):
if password:
password = password.encode()
zf = zipfile.ZipFile(src_file)
try:
zf.extractall(path=dest_dir, pwd=password)
except RuntimeError as e:
return False
zf.close()
return True
def get_match_version():
## 获取最接近本机chrome版本的chromedirver版本号
# 获取本机chrome版本号
try:
chrome_version = winreg.QueryValueEx(winreg.OpenKey(winreg.HKEY_CURRENT_USER,'Software\Google\Chrome\BLBeacon'),'Version')[0]
except:
raise WebDriverException("未安装chrome!")
# 访问服务器
try:
urlRead = urllib.request.urlopen(urllib.request.Request('https://npm.taobao.org/mirrors/chromedriver/')).read().decode()
except:
raise WebDriverException("服务器连接失败!")
# 从服务器的响应中解析可下载的chromedriver版本号
version_list = [i.split('/">')[0] for i in re.findall('<a href="/mirrors/chromedriver/(.*?)</a>',urlRead)]
# 迭代判断与本机chrome最接近的chromdriver版本号
version_list = [i for i in version_list if str.isdigit("".join(i.split(".")))]
the_closest_version = version_list[0] # 初始值为第一个版本号,然后开始迭代
for version in version_list:
if int("".join(chrome_version.split(".")).ljust(15,"0"))>=int("".join(version.split(".")).ljust(15,"0")):
the_closest_version = version
else:
break
return the_closest_version
def download_chromedirver():
# 获取匹配度最高的chromedriver版本号
the_closest_version = get_match_version()
# 下载服务器上的chromedriver并解压,默认下载32位chromedriver,可同时适用与32与64位chrome上
try:
urllib.request.urlretrieve('https://npm.taobao.org/mirrors/chromedriver/'+the_closest_version+'/chromedriver_win32.zip','chromedriver_win32.zip')
except:
raise WebDriverException("chromedriver下载失败!")
else:
if unzip_single('chromedriver_win32.zip',''):
print("下载成功!")
else:
raise WebDriverException("chromedriver下载失败解压失败!")
def get_browser(view_flag=1):
chrome_opt = webdriver.ChromeOptions() # 创建参数设置对象.
if view_flag == 0:
# 设置为无界面化运行
chrome_opt.add_argument('--headless') # 无界面化.
chrome_opt.add_argument('--disable-gpu') # 配合上面的无界面化.
chrome_opt.add_argument('--window-size=1366,768') # 设置窗口大小, 窗口大小会有影响.
if view_flag == 0 or view_flag == 1:
try:
browser = webdriver.Chrome(options=chrome_opt)
except WebDriverException as e: #若捕获到webdriver错误,则尝试下载匹配的chromedriver.exe
print("chromedirver载入错误,重新匹配中...")
download_chromedirver()
browser = webdriver.Chrome(options=chrome_opt)
return browser
else:
raise Exception("browser对象创建失败,参数不合法,view_flag只能为0或1!")
if __name__=="__main__":
browser = get_browser()
|