├── .gitignore ├── .idea ├── .gitignore ├── misc.xml ├── vcs.xml ├── inspectionProfiles │ ├── profiles_settings.xml │ └── Project_Default.xml ├── modules.xml └── pornhub-download.iml ├── config.yaml ├── README.md ├── login.py ├── pornhub.py └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # 默认忽略的文件 2 | /shelf/ 3 | /workspace.xml 4 | # 基于编辑器的 HTTP 客户端请求 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /config.yaml: -------------------------------------------------------------------------------- 1 | cookie: 2 | login: 3 | password: '' 4 | username: '' 5 | proxy: 6 | http: http://localhost:7890 7 | https: http://localhost:7890 8 | rpc: 9 | token: '' 10 | url: http://locakhost:6800/rpc 11 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/pornhub-download.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # pornhub-download 2 | 3 | - 使用aria2-rpc下载 4 | - 使用clash代理,代理端口可自定 5 | - python3 6 | - 需要安装execjs pyaria2 7 | 8 | # 用法 9 | - 1、 去pornhub 抓取自己的cookie,粘贴到cookie.txt 10 | - 2、 找到一个心仪的演员,复制其主页地址 11 | - 3、 终端python3 pornhub.py 12 | - 4、aria2 rpc模式打开,默认端口6800,无密钥,如过有修改,在代码内自行修改 13 | - 5、 将主页地址,粘进去回车开始下载 14 | 15 | - 输入用户页面,既可下载该用户上传的全部免费视频 16 | - 包括三种:channels、model、star 17 | - 暂时没注意到其他用户类型,如有可以留言回复 18 | 19 | 20 | # 2021.10.27更新 21 | 适应新的js规则 22 | 23 | # 2021.11.1更新 24 | 增加延迟,减少被ban几率 25 | 26 | # 2022.7.28 更新 27 | - 优化代码,变量名称,增加可读性 28 | - 增加requirements.txt 29 | - 增加uag.txt 30 | 31 | 32 | # 2022.7.29 更新 33 | - 增加更多user-agent 随机选择 34 | - 增加LOGO 35 | 36 | # 2022.8.31 更新 37 | - 用httpx替换requests,从而支持http2 38 | 39 | # 2022.11.3 更新 40 | - 使用yaml保存信息 41 | - 增加login.py,通过在cookei.yaml中设置usernam 和password 即可登录 42 | - 登录过程中可能会遇到机器验证,需在p站登录通过验证后即可 43 | - 之后即可利用保存在yaml里的信息,直接使用downloader 44 | 45 | # 2024.11.24 更新 46 | - 使用curl_cffi替换httpx 47 | - 更新videourl获取方式 48 | 49 | # 2024.11.28 更新 50 | - 将proxy,rpc都集中和cookie放在一起,以方便修改配置,将配置文件重名为config.yaml -------------------------------------------------------------------------------- /login.py: -------------------------------------------------------------------------------- 1 | import re 2 | from urllib.parse import quote 3 | 4 | import httpx 5 | import requests.utils as rus 6 | import yaml 7 | from curl_cffi import requests 8 | 9 | 10 | lag = 'www' 11 | h = { 12 | 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 13 | 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53', 14 | } 15 | config = yaml.load(open('config.yaml'), yaml.Loader) 16 | proxy = config['proxy'] 17 | res = requests.Session(proxies=proxy, timeout=5, headers=h) 18 | 19 | 20 | 21 | def login(): 22 | url = 'https://cn.pornhub.com/' 23 | s = res.get(url).text 24 | token = re.findall('token\s*?= "([^"]+)"', s)[0] 25 | redirect = re.findall('login\?redirect=([^"]+)"', s)[0] 26 | url2 = 'https://cn.pornhub.com/front/authenticate' 27 | d = f'redirect={redirect}&user_id=&intended_action=&token={token}&from=pc_login_modal_%3Aindex&taste_profile=&username={config["login"]["username"]}&password={quote(config["login"]["password"])}&remember_me=on' 28 | res.post(url2,data=d) 29 | cookie = res.cookies.jar 30 | cookie_dic = rus.dict_from_cookiejar(cookie) 31 | config.update({'cookie': cookie_dic}) 32 | w = open('config.yaml', 'w+') 33 | yaml.dump(config, w) 34 | 35 | 36 | login() 37 | -------------------------------------------------------------------------------- /pornhub.py: -------------------------------------------------------------------------------- 1 | import json 2 | import httpx 3 | import re 4 | import time 5 | from lxml import etree 6 | import pyaria2 7 | import random 8 | import yaml 9 | from curl_cffi import requests 10 | 11 | c = yaml.load(open('config.yaml'), yaml.Loader) 12 | rpc = pyaria2.Aria2RPC(url=c['rpc']['url'],token=c['rpc']['token']) 13 | lag = 'www' 14 | dic = {} 15 | cookie = '' 16 | for i in c['cookie']: 17 | cookie += f'{i}={c["cookie"][i]};' 18 | 19 | user_agents = open('uag.txt', 'r').read().split('\n') 20 | user_agent = random.choice(user_agents) 21 | 22 | h = { 23 | 'user-agent': user_agent, 24 | 'cookie': cookie, 25 | } 26 | 27 | proxy = c['proxy'] # 我这里clash端口7890,v2ray 端口8001 28 | 29 | res = requests.Session(proxies=proxy, timeout=5, headers=h) 30 | 31 | LOGO = ''' 32 | 33 | ___ _ 34 | / _ \ ___ _ __ _ __ /\ /\ _ _ | |__ 35 | / /_)// _ \ | '__|| '_ \ / /_/ /| | | || '_ \ 36 | / ___/| (_) || | | | | |/ __ / | |_| || |_) | 37 | \/ \___/ |_| |_| |_|\/ /_/ \__,_||_.__/ 38 | 39 | by laowei 40 | ''' 41 | 42 | 43 | def download(channels, video_url, name): 44 | options = { 45 | 'http-proxy': proxy['http'], 46 | 'https-proxy': proxy['https'], 47 | 'out': channels + '/' + name 48 | } # aria2 设置梯子 49 | rpc.addUri([video_url], options) 50 | 51 | 52 | def channels_list(channels, page): 53 | url = f'https://{lag}.pornhub.com/channels/{channels}/videos?o=ra&page={page}' 54 | s = res.get(url).text 55 | html = etree.HTML(s) 56 | view_keys = html.xpath('//ul[@class="videos row-5-thumbs videosGridWrapper"]/li/@data-video-vkey') 57 | names = html.xpath('//ul[@class="videos row-5-thumbs videosGridWrapper"]/li/div/div[3]/span/a/@title') 58 | for i, j in enumerate(view_keys): 59 | get_video(channels, j, names[i]) 60 | print(j, 'ok') 61 | return len(view_keys) 62 | 63 | 64 | def star_list(pornstar, page): 65 | url = f'https://{lag}.pornhub.com/pornstar/{pornstar}/videos/upload?page={page}' 66 | s = res.get(url).text 67 | html = etree.HTML(s) 68 | view_keys = html.xpath('//ul[@class="videos row-5-thumbs"]/li/@data-video-vkey') 69 | names = html.xpath('//ul[@class="videos row-5-thumbs"]/li/div/div[3]/span/a/@title') 70 | for i, j in enumerate(view_keys): 71 | get_video(pornstar, j, names[i]) 72 | print(j, 'ok') 73 | return len(view_keys) 74 | 75 | 76 | def model_list(models, page): 77 | url = f'https://{lag}.pornhub.com/model/{models}/videos?page={page}' 78 | s = res.get(url).text 79 | html = etree.HTML(s) 80 | view_keys = html.xpath('//ul[@id="mostRecentVideosSection"]/li/@data-video-vkey') 81 | names = html.xpath('//ul[@id="mostRecentVideosSection"]/li/div/div[3]/span/a/@title') 82 | for i, j in enumerate(view_keys): 83 | get_video(models, j, names[i]) 84 | print(j, 'ok') 85 | return len(view_keys) 86 | 87 | 88 | def get_video(channels, view_key, name): 89 | url = f'https://{lag}.pornhub.com/view_video.php?viewkey={view_key}' 90 | try: 91 | s = res.get(url).text 92 | json_data = re.findall('var flashvars_\d+ = (\{.*?});', s)[0] 93 | urls = json.loads(json_data)['mediaDefinitions'] 94 | nul = urls[-1]['videoUrl'] 95 | video_url = '' 96 | count = 0 97 | while video_url == '': 98 | video_url = res.get(nul).json()[count - 1]['videoUrl'] 99 | count = count - 1 100 | if count < -3: 101 | break 102 | 103 | download(channels, video_url, name + '.mp4') 104 | time.sleep(2) 105 | except Exception as err: 106 | print(err) 107 | time.sleep(2) 108 | pass 109 | 110 | 111 | def chanel(channels): 112 | count = 36 113 | page = 1 114 | while count == 36: 115 | count = channels_list(channels, page) 116 | page += 1 117 | 118 | 119 | def star(pornstar): 120 | count = 40 121 | page = 1 122 | while count == 40: 123 | count = star_list(pornstar, page) 124 | page += 1 125 | 126 | 127 | def model(models): 128 | count = 40 129 | page = 1 130 | while count == 40: 131 | count = model_list(models, page) 132 | page += 1 133 | 134 | 135 | if __name__ == '__main__': 136 | print(LOGO) 137 | input_address = input('地址').split('/') 138 | if input_address[3] == 'model': 139 | model(input_address[4]) 140 | elif input_address[3] == 'pornstar': 141 | star(input_address[4]) 142 | elif input_address[3] == 'channels': 143 | chanel(input_address[4]) 144 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | about-time==3.1.1 2 | absl-py==1.1.0 3 | adbutils==1.2.15 4 | addict==2.4.0 5 | aiohttp==3.8.4 6 | aiosignal==1.3.1 7 | albumentations==1.3.0 8 | alembic==1.14.0 9 | alive-progress==2.4.1 10 | altgraph==0.17.3 11 | amqp==5.1.1 12 | aniso8601==9.0.1 13 | anyio==3.6.1 14 | AnyQt==0.2.0 15 | apkutils2==1.0.0 16 | appdirs==1.4.4 17 | AppKit==0.2.8 18 | appnope==0.1.4 19 | APScheduler==3.7.0 20 | argon2-cffi==21.3.0 21 | argon2-cffi-bindings==21.2.0 22 | arrow==1.2.3 23 | asgiref==3.7.2 24 | asn1==2.6.0 25 | astor==0.8.1 26 | asttokens==2.0.5 27 | astunparse==1.6.3 28 | async-generator==1.10 29 | async-timeout==4.0.2 30 | attrs==24.2.0 31 | Automat==24.8.1 32 | backcall==0.2.0 33 | backports.zoneinfo==0.2.1 34 | baidu-aip==4.16.6 35 | basicsr==1.4.2 36 | bcrypt==3.2.2 37 | beautifulsoup4==4.12.3 38 | bencoder.pyx==3.0.0 39 | better-exceptions==0.3.3 40 | binaryornot==0.4.4 41 | bitarray==3.0.0 42 | bleach==6.1.0 43 | blinker==1.4 44 | boto3==1.35.68 45 | botocore==1.35.68 46 | bottle==0.12.25 47 | Brotli==1.0.9 48 | bs4==0.0.1 49 | cachetools==5.3.0 50 | certifi==2024.8.30 51 | cffi==1.15.0 52 | chardet==5.2.0 53 | charset-normalizer==2.0.12 54 | cigam==0.0.3 55 | click==8.1.3 56 | clipboard==0.0.4 57 | cloudscraper==1.2.69 58 | colorama==0.4.6 59 | coloredlogs==15.0.1 60 | commonmark==0.9.1 61 | comtypes==1.1.11 62 | constantly==15.1.0 63 | cookiecutter==2.1.1 64 | coverage==7.2.5 65 | crawlab==0.1.0a8 66 | crochet==2.0.0 67 | cryptography==36.0.2 68 | cssselect==1.1.0 69 | curl_cffi==0.7.3 70 | customtkinter==5.1.3 71 | cycler==0.11.0 72 | Cython==3.0.11 73 | darkdetect==0.8.0 74 | DataRecorder==3.4.14 75 | DBUtils==3.1.0 76 | ddddocr==1.4.3 77 | debtcollector==2.5.0 78 | debugpy==1.6.0 79 | decorator==5.1.1 80 | deepl-translate==1.2.0 81 | defusedxml==0.7.1 82 | Deprecated==1.2.13 83 | deprecation==2.1.0 84 | dirscan==0.9 85 | dirsearch==0.4.3.post1 86 | distlib==0.3.6 87 | Django==4.2.6 88 | django-apscheduler==0.6.0 89 | django-cors-headers==3.7.0 90 | djangorestframework==3.13.1 91 | dnspython==2.2.1 92 | docopt==0.6.2 93 | docutils==0.19 94 | dogpile.cache==1.1.8 95 | DownloadKit==2.0.0 96 | DrissionPage==4.0.4.23 97 | easydict==1.10 98 | easygui==0.98.3 99 | ecdsa==0.18.0 100 | EditorConfig==0.12.4 101 | elementpath==3.0.2 102 | entrypoints==0.4 103 | enum-compat==0.0.3 104 | et-xmlfile==1.1.0 105 | eventlet==0.33.2 106 | exceptiongroup==1.1.1 107 | executing==0.8.3 108 | extras==1.0.0 109 | Fabric3==1.14.post1 110 | facexlib==0.3.0 111 | fake-useragent==1.1.1 112 | fasteners==0.18 113 | fastjsonschema==2.15.3 114 | feapder==1.7.6 115 | feedparser==6.0.10 116 | filelock==3.12.0 117 | filterpy==1.4.5 118 | fixtures==4.0.1 119 | flake8==6.0.0 120 | Flask==2.0.3 121 | Flask-Compress==1.12 122 | Flask-RESTful==0.3.10 123 | Flask-SQLAlchemy==2.5.1 124 | flatbuffers==23.5.26 125 | flet==0.4.2 126 | flet-core==0.4.2 127 | fonttools==4.33.3 128 | frida==16.1.8 129 | frida-dexdump==2.0.1 130 | frida-tools==12.3.0 131 | frozenlist==1.3.3 132 | func-timeout==4.3.5 133 | furl==2.1.3 134 | future==0.18.3 135 | futurist==2.4.1 136 | gast==0.4.0 137 | gdown==4.7.1 138 | gerapy==0.9.10 139 | gevent==21.12.0 140 | gfpgan==1.3.8 141 | google-auth==2.19.1 142 | google-auth-oauthlib==1.0.0 143 | google-pasta==0.2.0 144 | grapheme==0.6.0 145 | greenlet==1.1.2 146 | grpcio==1.54.2 147 | gunicorn==19.9.0 148 | h11==0.14.0 149 | h2==4.1.0 150 | h5py==3.7.0 151 | hexdump==3.3 152 | hpack==4.0.0 153 | httpcore==0.18.0 154 | httpx==0.25.0 155 | humanfriendly==10.0 156 | hyperframe==6.0.1 157 | hyperlink==21.0.0 158 | idna==2.10 159 | imageio==2.31.1 160 | imbalanced-learn==0.9.1 161 | imblearn==0.0 162 | img2pdf==0.4.4 163 | importlib-metadata==4.11.4 164 | importlib-resources==5.8.0 165 | incremental==24.7.2 166 | influxdb==5.3.1 167 | iniconfig==2.0.0 168 | insightface==0.7.3 169 | integrate==1.3.0 170 | ipykernel==6.15.0 171 | ipython==8.4.0 172 | ipython-genutils==0.2.0 173 | ipywidgets==7.7.0 174 | iso8601==1.1.0 175 | itemadapter==0.6.0 176 | itemloaders==1.0.4 177 | itsdangerous==2.1.2 178 | jax==0.4.13 179 | jeb==2.0.0 180 | jedi==0.18.1 181 | jellyfin-apiclient-python==1.8.1 182 | Jinja2==3.1.4 183 | jinja2-time==0.2.0 184 | jmespath==1.0.1 185 | jnitrace==3.3.1 186 | joblib==1.1.0 187 | jsbeautifier==1.14.7 188 | jsonschema==4.6.0 189 | jupyter==1.0.0 190 | jupyter-client==7.3.4 191 | jupyter-console==6.4.3 192 | jupyter-core==4.10.0 193 | jupyterlab-pygments==0.2.2 194 | jupyterlab-widgets==1.1.0 195 | kaitaistruct==0.9 196 | keras==2.13.1 197 | Keras-Preprocessing==1.1.2 198 | keystone==22.0.0 199 | keystoneauth1==5.1.0 200 | keystonemiddleware==10.1.0 201 | Kivy==2.1.0 202 | Kivy-Garden==0.1.5 203 | kivy-ios==2022.7.19 204 | kiwisolver==1.4.3 205 | kombu==5.2.4 206 | langid==1.1.6 207 | latex2mathml==3.77.0 208 | lazy_loader==0.2 209 | ldap3==2.9.1 210 | libclang==14.0.1 211 | lightgbm==3.3.2 212 | llvmlite==0.40.0 213 | lmdb==1.4.1 214 | logparser==0.8.2 215 | loguru==0.7.0 216 | lxml==4.9.2 217 | lz4==4.0.2 218 | macholib==1.16.2 219 | Mako==1.2.4 220 | Markdown==3.3.7 221 | MarkupSafe==2.1.1 222 | matplotlib==3.5.2 223 | matplotlib-inline==0.1.3 224 | mccabe==0.7.0 225 | mistune==0.8.4 226 | mitmproxy==8.0.0 227 | ml-dtypes==0.2.0 228 | mock==5.0.2 229 | modulegraph==0.19.3 230 | mpmath==1.2.1 231 | msgpack==1.0.4 232 | multidict==6.0.4 233 | nbclient==0.6.4 234 | nbconvert==6.5.0 235 | nbformat==5.4.0 236 | ndg-httpsclient==0.5.1 237 | nest-asyncio==1.5.5 238 | netaddr==0.8.0 239 | netifaces==0.11.0 240 | networkx==3.1 241 | notebook==6.4.12 242 | ntlm-auth==1.5.0 243 | numba==0.57.0 244 | numpy==1.23.5 245 | oauthlib==3.2.2 246 | onnx==1.14.0 247 | onnxruntime==1.15.0 248 | openai==0.27.0 249 | opencv-contrib-python-headless==4.7.0.68 250 | opencv-python==4.7.0.72 251 | opencv-python-headless==4.7.0.72 252 | opennsfw2==0.10.2 253 | openpyxl==3.1.2 254 | openstep-parser==1.5.4 255 | opt-einsum==3.3.0 256 | orderedmultidict==1.0.1 257 | os-service-types==1.7.0 258 | oshash==0.1.1 259 | oslo.cache==3.3.0 260 | oslo.concurrency==5.0.1 261 | oslo.config==9.0.0 262 | oslo.context==5.0.0 263 | oslo.db==12.2.0 264 | oslo.i18n==5.1.0 265 | oslo.log==5.0.2 266 | oslo.messaging==14.0.0 267 | oslo.metrics==0.5.0 268 | oslo.middleware==5.0.0 269 | oslo.policy==4.0.0 270 | oslo.serialization==5.0.0 271 | oslo.service==3.0.0 272 | oslo.upgradecheck==2.0.0 273 | oslo.utils==6.1.0 274 | osprofiler==3.4.3 275 | outcome==1.2.0 276 | packaging==21.3 277 | paddle-bfloat==0.1.2 278 | paddlepaddle==2.3.0 279 | pandas==1.4.3 280 | pandocfilters==1.5.0 281 | paramiko==2.11.0 282 | parse==1.19.0 283 | parsel==1.6.0 284 | parso==0.8.3 285 | passlib==1.7.4 286 | Paste==3.10.1 287 | PasteDeploy==3.0.1 288 | pbr==5.11.0 289 | pbxproj==3.4.3 290 | pexpect==4.8.0 291 | pickleshare==0.7.5 292 | pikepdf==5.4.0 293 | Pillow==9.4.0 294 | ping3==4.0.4 295 | pip-review==1.3.0 296 | pipreqs==0.4.11 297 | platformdirs==3.5.1 298 | playsound==1.3.0 299 | plotly==5.14.1 300 | pluggy==1.0.0 301 | pocx==0.2.2 302 | pornhubapi==0.1.0 303 | prettytable==3.5.0 304 | priority==1.3.0 305 | prometheus-client==0.17.1 306 | prompt-toolkit==3.0.29 307 | Protego==0.2.1 308 | protobuf==4.23.2 309 | psutil==5.9.5 310 | ptyprocess==0.7.0 311 | publicsuffix2==2.20191221 312 | pure-eval==0.2.2 313 | py==1.11.0 314 | py2app==0.28.5 315 | pyaes==1.6.1 316 | pyaria2==0.1.1 317 | pyasn1==0.4.8 318 | pyasn1-modules==0.2.8 319 | pyautocad==0.2.0 320 | pycadf==3.1.1 321 | pycairo==1.21.0 322 | pycodestyle==2.10.0 323 | pycparser==2.21 324 | pycrypto==2.6.1 325 | pycryptodome==3.15.0 326 | PyDispatcher==2.0.7 327 | pyee==8.2.2 328 | pyelftools==0.30 329 | PyExecJS==1.5.1 330 | pyfiglet==0.8.post1 331 | pyflakes==3.0.1 332 | PyForms==3.0.0 333 | pygame==2.1.2 334 | Pygments==2.12.0 335 | PyGObject==3.42.2 336 | pyimg4==0.6.2 337 | pyinstaller==5.5 338 | pyinstaller-hooks-contrib==2022.10 339 | PyJWT==2.6.0 340 | pyliblzfse==0.4.1 341 | pylzss==0.3.1 342 | pymongo==4.1.1 343 | PyMySQL==1.1.1 344 | PyNaCl==1.5.0 345 | pyobjc==8.5 346 | pyobjc-core==8.5 347 | pyobjc-framework-Accessibility==8.5 348 | pyobjc-framework-Accounts==8.5 349 | pyobjc-framework-AddressBook==8.5 350 | pyobjc-framework-AdServices==8.5 351 | pyobjc-framework-AdSupport==8.5 352 | pyobjc-framework-AppleScriptKit==8.5 353 | pyobjc-framework-AppleScriptObjC==8.5 354 | pyobjc-framework-ApplicationServices==8.5 355 | pyobjc-framework-AppTrackingTransparency==8.5 356 | pyobjc-framework-AudioVideoBridging==8.5 357 | pyobjc-framework-AuthenticationServices==8.5 358 | pyobjc-framework-AutomaticAssessmentConfiguration==8.5 359 | pyobjc-framework-Automator==8.5 360 | pyobjc-framework-AVFoundation==8.5 361 | pyobjc-framework-AVKit==8.5 362 | pyobjc-framework-BusinessChat==8.5 363 | pyobjc-framework-CalendarStore==8.5 364 | pyobjc-framework-CallKit==8.5 365 | pyobjc-framework-CFNetwork==8.5 366 | pyobjc-framework-ClassKit==8.5 367 | pyobjc-framework-CloudKit==8.5 368 | pyobjc-framework-Cocoa==8.5 369 | pyobjc-framework-Collaboration==8.5 370 | pyobjc-framework-ColorSync==8.5 371 | pyobjc-framework-Contacts==8.5 372 | pyobjc-framework-ContactsUI==8.5 373 | pyobjc-framework-CoreAudio==8.5 374 | pyobjc-framework-CoreAudioKit==8.5 375 | pyobjc-framework-CoreBluetooth==8.5 376 | pyobjc-framework-CoreData==8.5 377 | pyobjc-framework-CoreHaptics==8.5 378 | pyobjc-framework-CoreLocation==8.5 379 | pyobjc-framework-CoreMedia==8.5 380 | pyobjc-framework-CoreMediaIO==8.5 381 | pyobjc-framework-CoreMIDI==8.5 382 | pyobjc-framework-CoreML==8.5 383 | pyobjc-framework-CoreMotion==8.5 384 | pyobjc-framework-CoreServices==8.5 385 | pyobjc-framework-CoreSpotlight==8.5 386 | pyobjc-framework-CoreText==8.5 387 | pyobjc-framework-CoreWLAN==8.5 388 | pyobjc-framework-CryptoTokenKit==8.5 389 | pyobjc-framework-DataDetection==8.5 390 | pyobjc-framework-DeviceCheck==8.5 391 | pyobjc-framework-DictionaryServices==8.5 392 | pyobjc-framework-DiscRecording==8.5 393 | pyobjc-framework-DiscRecordingUI==8.5 394 | pyobjc-framework-DiskArbitration==8.5 395 | pyobjc-framework-DVDPlayback==8.5 396 | pyobjc-framework-EventKit==8.5 397 | pyobjc-framework-ExceptionHandling==8.5 398 | pyobjc-framework-ExecutionPolicy==8.5 399 | pyobjc-framework-ExternalAccessory==8.5 400 | pyobjc-framework-FileProvider==8.5 401 | pyobjc-framework-FileProviderUI==8.5 402 | pyobjc-framework-FinderSync==8.5 403 | pyobjc-framework-FSEvents==8.5 404 | pyobjc-framework-GameCenter==8.5 405 | pyobjc-framework-GameController==8.5 406 | pyobjc-framework-GameKit==8.5 407 | pyobjc-framework-GameplayKit==8.5 408 | pyobjc-framework-ImageCaptureCore==8.5 409 | pyobjc-framework-IMServicePlugIn==8.5 410 | pyobjc-framework-InputMethodKit==8.5 411 | pyobjc-framework-InstallerPlugins==8.5 412 | pyobjc-framework-InstantMessage==8.5 413 | pyobjc-framework-Intents==8.5 414 | pyobjc-framework-IntentsUI==8.5 415 | pyobjc-framework-IOSurface==8.5 416 | pyobjc-framework-iTunesLibrary==8.5 417 | pyobjc-framework-KernelManagement==8.5 418 | pyobjc-framework-LatentSemanticMapping==8.5 419 | pyobjc-framework-LaunchServices==8.5 420 | pyobjc-framework-libdispatch==8.5 421 | pyobjc-framework-LinkPresentation==8.5 422 | pyobjc-framework-LocalAuthentication==8.5 423 | pyobjc-framework-LocalAuthenticationEmbeddedUI==8.5 424 | pyobjc-framework-MailKit==8.5 425 | pyobjc-framework-MapKit==8.5 426 | pyobjc-framework-MediaAccessibility==8.5 427 | pyobjc-framework-MediaLibrary==8.5 428 | pyobjc-framework-MediaPlayer==8.5 429 | pyobjc-framework-MediaToolbox==8.5 430 | pyobjc-framework-Metal==8.5 431 | pyobjc-framework-MetalKit==8.5 432 | pyobjc-framework-MetalPerformanceShaders==8.5 433 | pyobjc-framework-MetalPerformanceShadersGraph==8.5 434 | pyobjc-framework-MetricKit==8.5 435 | pyobjc-framework-MLCompute==8.5 436 | pyobjc-framework-ModelIO==8.5 437 | pyobjc-framework-MultipeerConnectivity==8.5 438 | pyobjc-framework-NaturalLanguage==8.5 439 | pyobjc-framework-NetFS==8.5 440 | pyobjc-framework-Network==8.5 441 | pyobjc-framework-NetworkExtension==8.5 442 | pyobjc-framework-NotificationCenter==8.5 443 | pyobjc-framework-OpenDirectory==8.5 444 | pyobjc-framework-OSAKit==8.5 445 | pyobjc-framework-OSLog==8.5 446 | pyobjc-framework-PassKit==8.5 447 | pyobjc-framework-PencilKit==8.5 448 | pyobjc-framework-Photos==8.5 449 | pyobjc-framework-PhotosUI==8.5 450 | pyobjc-framework-PreferencePanes==8.5 451 | pyobjc-framework-PushKit==8.5 452 | pyobjc-framework-Quartz==8.5 453 | pyobjc-framework-QuickLookThumbnailing==8.5 454 | pyobjc-framework-ReplayKit==8.5 455 | pyobjc-framework-SafariServices==8.5 456 | pyobjc-framework-SceneKit==8.5 457 | pyobjc-framework-ScreenCaptureKit==8.5 458 | pyobjc-framework-ScreenSaver==8.5 459 | pyobjc-framework-ScreenTime==8.5 460 | pyobjc-framework-ScriptingBridge==8.5 461 | pyobjc-framework-SearchKit==8.5 462 | pyobjc-framework-Security==8.5 463 | pyobjc-framework-SecurityFoundation==8.5 464 | pyobjc-framework-SecurityInterface==8.5 465 | pyobjc-framework-ServiceManagement==8.5 466 | pyobjc-framework-ShazamKit==8.5 467 | pyobjc-framework-Social==8.5 468 | pyobjc-framework-SoundAnalysis==8.5 469 | pyobjc-framework-Speech==8.5 470 | pyobjc-framework-SpriteKit==8.5 471 | pyobjc-framework-StoreKit==8.5 472 | pyobjc-framework-SyncServices==8.5 473 | pyobjc-framework-SystemConfiguration==8.5 474 | pyobjc-framework-SystemExtensions==8.5 475 | pyobjc-framework-UniformTypeIdentifiers==8.5 476 | pyobjc-framework-UserNotifications==8.5 477 | pyobjc-framework-UserNotificationsUI==8.5 478 | pyobjc-framework-VideoSubscriberAccount==8.5 479 | pyobjc-framework-VideoToolbox==8.5 480 | pyobjc-framework-Virtualization==8.5 481 | pyobjc-framework-Vision==8.5 482 | pyobjc-framework-WebKit==8.5 483 | PyOpenGL==3.1.6 484 | pyOpenSSL==22.0.0 485 | pyparsing==3.0.9 486 | PyPDF2==3.0.1 487 | pyperclip==1.8.2 488 | pyppeteer==1.0.2 489 | pyproject_api==1.5.1 490 | PyQt5==5.15.11 491 | pyqt5-plugins==5.15.4.2.2 492 | PyQt5-Qt5==5.15.2 493 | pyqt5-tools==5.15.4.3.2 494 | PyQt5_sip==12.15.0 495 | pyquery==1.4.1 496 | Pyrogram==1.4.12 497 | pyrsistent==0.18.1 498 | PyRSS2Gen==1.1 499 | pysaml2==7.2.1 500 | PySimpleGUI==4.60.3 501 | PySocks==1.7.1 502 | pyspnego==0.9.0 503 | pytest==7.3.1 504 | pytest-cov==4.0.0 505 | python-dateutil==2.8.2 506 | python-docx==0.8.11 507 | python-dotenv==0.20.0 508 | python-keystoneclient==5.0.1 509 | python-owasp-zap-v2.4==0.0.14 510 | python-scrapyd-api==2.1.2 511 | python-slugify==6.1.2 512 | pytz==2022.1 513 | pytz-deprecation-shim==0.1.0.post0 514 | PyWavelets==1.4.1 515 | pywifi==1.1.12 516 | PyYAML==6.0.2 517 | pyzmq==23.1.0 518 | qrcode==7.3.1 519 | QScintilla==2.13.3 520 | qt5-applications==5.15.2.2.2 521 | qt5-tools==5.15.2.1.2 522 | qtconsole==5.3.1 523 | QtPy==2.1.0 524 | qudida==0.0.4 525 | queuelib==1.6.2 526 | redis==4.5.5 527 | redis-py-cluster==2.1.3 528 | repath==0.9.0 529 | repoze.lru==0.7 530 | requests==2.32.3 531 | requests-file==1.5.1 532 | requests-html==0.10.0 533 | requests-ntlm==1.2.0 534 | requests-oauthlib==1.3.1 535 | requests-toolbelt==0.9.1 536 | retry==0.9.2 537 | rfc3986==1.5.0 538 | rich==12.1.0 539 | Routes==2.5.1 540 | rsa==4.8 541 | ruamel.yaml==0.17.21 542 | ruamel.yaml.clib==0.2.7 543 | s3transfer==0.10.4 544 | scikeras @ git+https://github.com/rdk2132/scikeras@b7a2ce5487b2a0164e6be7f5172a894859eebb03 545 | scikit-image==0.21.0 546 | scikit-learn==1.1.1 547 | scipy==1.8.1 548 | Scrapy==2.9.0 549 | scrapy-redis==0.7.3 550 | scrapy-splash==0.8.0 551 | scrapyd==1.4.2 552 | scrapyd-client==1.2.2 553 | scrapydart==1.2.0.327 554 | scrapydo==0.2.2 555 | scrapydweb==1.4.0 556 | scrypt==0.8.20 557 | seaborn==0.11.2 558 | secret==0.8 559 | selenium==4.15.2 560 | Send2Trash==1.8.0 561 | service-identity==21.1.0 562 | sgmllib3k==1.0.0 563 | sh==1.14.3 564 | Simple-AES-Cipher==1.0.7 565 | six==1.16.0 566 | sklearn==0.0.post1 567 | sniffio==1.2.0 568 | sortedcontainers==2.4.0 569 | soupsieve==2.3.2.post1 570 | SQLAlchemy==1.4.37 571 | sqlalchemy-migrate==0.13.0 572 | sqlparse==0.4.2 573 | stack-data==0.3.0 574 | statsd==4.0.1 575 | stevedore==4.1.1 576 | sympy==1.10.1 577 | tabulate==0.9.0 578 | tb-nightly==2.14.0a20230522 579 | Tempita==0.5.2 580 | tenacity==8.2.2 581 | tensorboard==2.13.0 582 | tensorboard-data-server==0.7.0 583 | tensorboard-plugin-wit==1.8.1 584 | tensorflow==2.13.0rc1 585 | tensorflow-estimator==2.13.0 586 | tensorflow-io-gcs-filesystem==0.26.0 587 | termcolor==1.1.0 588 | terminado==0.15.0 589 | testresources==2.0.1 590 | testscenarios==0.5.0 591 | testtools==2.5.0 592 | text-unidecode==1.3 593 | TgCrypto==1.2.3 594 | threadpoolctl==3.1.0 595 | tifffile==2023.4.12 596 | tinycss2==1.1.1 597 | tk==0.1.0 598 | tldextract==3.3.0 599 | tomli==2.0.1 600 | torch==2.0.1 601 | torchvision==0.15.2 602 | tornado==6.1 603 | tox==4.5.1 604 | tqdm==4.65.0 605 | traitlets==5.3.0 606 | trio==0.21.0 607 | trio-websocket==0.9.2 608 | Twisted==24.10.0 609 | typing_extensions==4.2.0 610 | tzdata==2022.1 611 | tzlocal==2.1 612 | uberegg==0.1.1 613 | ui==0.1.4 614 | urllib3==2.2.3 615 | urwid==2.1.2 616 | validators==0.20.0 617 | vine==5.0.0 618 | virtualenv==20.23.0 619 | visvis==1.13.0 620 | w3lib==1.22.0 621 | waitress==2.1.2 622 | wallbreaker==1.0.3 623 | watchdog==2.3.0 624 | wcwidth==0.2.5 625 | webdriver-manager==3.7.1 626 | webencodings==0.5.1 627 | WebOb==1.8.7 628 | websocket==0.2.1 629 | websocket-client==1.5.1 630 | websockets==11.0.3 631 | Werkzeug==2.1.2 632 | wget==3.2 633 | whichcraft==0.6.1 634 | widgetsnbextension==3.6.0 635 | WMI==1.4.9 636 | wrapt==1.14.1 637 | wsproto==1.1.0 638 | wxPython==4.1.1 639 | xlwt==1.3.0 640 | xmlschema==2.1.1 641 | xmltodict==0.13.0 642 | xvfbwrapper==0.2.9 643 | yapf==0.33.0 644 | yappi==1.4.0 645 | yarg==0.1.9 646 | yarl==1.8.2 647 | YJ-3==9.9 648 | zhconv==1.4.3 649 | zipp==3.8.0 650 | zope.event==4.5.0 651 | zope.interface==5.4.0 652 | zstandard==0.17.0 653 | --------------------------------------------------------------------------------