Repository: TheKingOfDuck/domain_screen
Branch: master
Commit: ea3949a5050a
Files: 7
Total size: 67.1 KB
Directory structure:
gitextract_80hm6apt/
├── .gitattributes
├── README.md
├── main.py
├── template.htm
├── template_files/
│ └── main.css
├── test.py
└── urls.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.js linguist-language=python
*.css linguist-language=python
*.html linguist-language=python
================================================
FILE: README.md
================================================
# domain_screen
批量采集站点基础信息&截图。
## log
20190726:修复截图过大导致的网络超时问题及简化使用,支持批量截图,截图完的域名列表会直接移到finished目录。(需要截图的域名列表放在根目录下即可)
20190724:感谢\xeb\xfe师傅帮忙修复一个bug。
## about
[bcScan](https://github.com/TheKingOfDuck/bcScan)的升级版本,包括但不限于提升了截图的速度,报告的友好度。
py3环境下运行,报告生成在report目录下。依赖缺啥就自己pip装啥就OK了。
## use:
python3 main.py

================================================
FILE: main.py
================================================
# -*- coding: utf-8 -*-
__author__ = 'CoolCat'
import asyncio
from pyppeteer import launch
import sys
import shutil
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
File Name: srcScan
Description :
Author : CoolCat
date: 2019/3/14
-------------------------------------------------
Change Activity:
2019/3/14:
-------------------------------------------------
"""
# coding=utf-8
import re
import requests
import time
import os
import socket
global info
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
htmlHeader = """
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../template_files/main.css" rel="stylesheet" type="text/css">
<title>子域名扫描报告</title></head>
<body style="padding-right: 320px;">
<div class="main-inner">
<div id="posts" class="posts-expand">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">子域名扫描报告</h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-text">生成于</span>
<time title="Post created" itemprop="dateCreated datePublished">timeaaaaaaa</time></span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
"""
htmlcat = """
<aside id="sidebar" class="sidebar sidebar-active" style="display: block; width: 320px;">
<div class="sidebar-inner">
<ul class="sidebar-nav motion-element" style="opacity: 1; display: block; transform: translateX(0px);">
<li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">目录</li></ul>
<!--noindex-->
<section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active" style="opacity: 1; display: block; transform: translateX(0px);">
<div class="post-toc" style="max-height: 750px; width: calc(100% + 0px);">
<div class="post-toc-content">
<ol class="nav">
"""
htmlfooter = """
<div>
<div style="padding: 10px 0; margin: 20px auto; width: 90%; text-align: center;">
<div>扫描赞赏二维码,救救没钱的孩子吧!</div>
<div id="QR" style="display: block;">
<div id="wechat" style="display: inline-block">
<img id="wechat_qr" src="../template_files/wechat.jpg" ></a>
<p>微 信</p>
</div>
<div id="alipay" style="display: inline-block">
<img id="alipay_qr" src="../template_files/alipay.png" ></a>
<p>支付宝</p>
</div>
</div>
</div>
"""
htmlcat2 = """
<li class="nav-item nav-level-1">
<a class="nav-link" href="#domain.com">
<span class="nav-number">nnnnn.</span>
<span class="nav-text">domain.com</span></a>
</li>
"""
def getIP(domain):
myaddr = socket.getaddrinfo(domain, 'http')
return "IP:" + str(myaddr[0][4][0])
def getInfo(res):
try:
Server = res.headers["Server"]
except:
Server = None
pass
try:
code = res.headers["X-Powered-By"]
except:
code = None
pass
return "Server:" + str(Server) + "\t Code:" + str(code)
def scanurl(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063'}
res = requests.get(url=url, headers=headers, timeout=5, verify=False)
return res
def urlformat(site):
site = site.replace("\"", "").replace("\n", "")
if "http" in site:
return site
elif site.strip():
return "http://" + site + "/"
else:
pass
def outPut(target, title, imageName):
ip = getIP(str(re.compile('http://(.*?)/').findall(target)[0]))
domain = target.replace("https://", "").replace("http://", "").replace("/", "")
temp = """
<h1 id="domain1234">title1234</h1>
<a href="httpurl1234" target="_blank">httpurl1234</a></br>
<a>ip1234</a></br>
<a>info1234</a></br>
<img src="cat.png1234">
</br>
"""
### temp瞎几把加了几个1234是为了防止提取到的信息中包含这几个字符串,会乱掉。
temp = temp.replace('domain1234', domain).replace('title1234', title).replace('httpurl1234', target).replace(
'ip1234', ip).replace('info1234', info).replace('cat.png1234', "../images/" + imageName)
with open("./reports/" + reportFile, "a") as f:
f.write(temp + "\n")
async def screenshot(url):
browser = await launch({'headless': True,
'args': [
'--disable-extensions',
'--disable-infobars',
'--hide-scrollbars',
'–disable-dev-shm-usage',
'--mute-audio',
'–disable-setuid-sandbox',
'–no-sandbox',
'–no-zygote',
'--window-size=1024,768',
'--disable-gpu',
],
# 防止多开页面卡死
'dumpio': True,
'ignoreHTTPSErrors': True,
'executablePath': '/Applications/Chromium.app/Contents/MacOS/Chromium'})
page = await browser.newPage()
await page.goto(url, timeout=10000)
await page.setViewport({'width': 1000, 'height': 698})
await page.waitFor(1000)
imageName = url.replace("https://", "").replace("http://", "").replace("/", "") + ".png"
await page.screenshot({'path': './images/' + imageName})
try:
element = await page.querySelector('title')
title = await page.evaluate('(element) => element.textContent', element)
except:
title = 'no title'
await browser.close()
outPut(url, title, imageName)
if __name__ == '__main__':
if os.path.exists('finished') == False:
os.mkdir('finished')
for root, dirs, files in os.walk(os.getcwd(), topdown=False):
for name in files:
file = os.path.splitext(name)
txtfilename, type = file
if type == '.txt' and 'finished' not in root:
srcfile = (root + '/' + name)
dstfile = (root + '/finished/' + name)
reportFilename = txtfilename
if not os.path.exists('reports') or not os.path.exists('images'):
try:
os.makedirs("reports")
except:
pass
try:
os.makedirs("images")
except:
pass
htmlHeader = htmlHeader.replace('timeaaaaaaa', str(time.strftime("%Y-%m-%d")))
reportFile = str(time.strftime("%Y-%m-%d-{}".format(reportFilename))) + ".html"
if os.path.exists("./reports/" + reportFile):
os.remove("./reports/" + reportFile)
with open("./reports/" + reportFile, "w") as f:
f.write(htmlHeader)
n = 0
tmp = ""
with open(srcfile) as sites:
for site in sites:
site = site.replace("\r", "").replace("\n", "").replace(" ", "")
if site == "":
pass
else:
url = urlformat(site)
print(url)
try:
res = scanurl(url)
print("[*]" + str(res.status_code) + "\t" + url)
try:
info = getInfo(res)
except:
info = None
pass
if res.status_code == 200 or res.status_code == 403 or res.status_code == 404:
n += 1
domain = url.replace("https://", "").replace("http://", "").replace("/", "")
try:
asyncio.get_event_loop().run_until_complete(screenshot(url))
tmp += htmlcat2.replace("domain.com", domain).replace("nnnnn", str(n)) + "\n"
except Exception as e:
pass
except:
pass
# 写目录1
with open("./reports/" + reportFile, "a") as f:
f.write(htmlcat)
# 写目录2
with open("./reports/" + reportFile, "a") as f:
f.write(tmp)
# 乞讨信息
with open("./reports/" + reportFile, "a") as f:
f.write(htmlfooter)
shutil.move(srcfile, dstfile)
================================================
FILE: template.htm
================================================
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="./template_files/main.css" rel="stylesheet" type="text/css">
<title>xxx子域名扫描报告</title></head>
<body style="padding-right: 320px;">
<div class="main-inner">
<div id="posts" class="posts-expand">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">xxx子域名扫描报告</h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-text">生成于</span>
<time title="Post created" itemprop="dateCreated datePublished" datetime="2019-04-18T16:04:21+08:00">2019-04-18</time></span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<!--报告开始-->
<h1 id="aliyun.com">Security Advisory</h1>
<a href="https://pivotal.io/security/cve-2019-3799" target="_blank">https://pivotal.io/security/cve-2019-3799</a></br>
<a>aaa</a>
<img src="./template_files/20190417224755-c8ec71d6-611f-1.png" alt="1.png">
<!--报告结束-->
<aside id="sidebar" class="sidebar sidebar-active" style="display: block; width: 320px;">
<div class="sidebar-inner">
<ul class="sidebar-nav motion-element" style="opacity: 1; display: block; transform: translateX(0px);">
<li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">目录</li></ul>
<!--noindex-->
<section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active" style="opacity: 1; display: block; transform: translateX(0px);">
<div class="post-toc" style="max-height: 100%; width: calc(100% + 0px);">
<div class="post-toc-content">
<ol class="nav">
<!--目录开始-->
<li class="nav-item nav-level-1">
<a class="nav-link" href="#aliyun.com">
<span class="nav-number">1.</span>
<span class="nav-text">Security Advisory</span></a>
</li>
<li class="nav-item nav-level-1">
<a class="nav-link" href="#Security-Advisory">
<span class="nav-number">1.</span>
<span class="nav-text">Security Advisory</span></a>
</li>
<!--目录结束-->
<div>
<div style="padding: 10px 0; margin: 20px auto; width: 90%; text-align: center;">
<div>扫描赞赏二维码,救救没钱的孩子吧!</div>
<div id="QR" style="display: block;">
<div id="wechat" style="display: inline-block">
<img id="wechat_qr" src="./template_files/wechat.jpg" ></a>
<p>微 信</p>
</div>
<div id="alipay" style="display: inline-block">
<img id="alipay_qr" src="./template_files/alipay.png" ></a>
<p>支付宝</p>
</div>
</div>
</div>
================================================
FILE: template_files/main.css
================================================
/* normalize.css v3.0.2 | MIT License | git.io/normalize */
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
body {
margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
audio:not([controls]) {
display: none;
height: 0;
}
[hidden],
template {
display: none;
}
a {
background-color: transparent;
}
a:active,
a:hover {
outline: 0;
}
abbr[title] {
border-bottom: 1px dotted;
}
b,
strong {
font-weight: bold;
}
dfn {
font-style: italic;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
}
mark {
background: #ff0;
color: #000;
}
small {
font-size: 80%;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
img {
border: 0;
}
svg:not(:root) {
overflow: hidden;
}
figure {
margin: 1em 40px;
}
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
pre {
overflow: auto;
}
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
color: inherit; /* 1 */
font: inherit; /* 2 */
margin: 0; /* 3 */
}
button {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
input {
line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
textarea {
overflow: auto;
}
optgroup {
font-weight: bold;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}
::selection {
background: #262a30;
color: #fff;
}
body {
position: relative;
font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif;
font-size: 14px;
line-height: 2;
color: #555;
background: #fff;
}
@media (max-width: 767px) {
body {
padding-right: 0 !important;
}
}
@media (min-width: 768px) and (max-width: 991px) {
body {
padding-right: 0 !important;
}
}
@media (min-width: 1600px) {
body {
font-size: 16px;
}
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0;
padding: 0;
font-weight: bold;
line-height: 1.5;
font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif;
}
h2,
h3,
h4,
h5,
h6 {
margin: 20px 0 15px;
}
h1 {
font-size: 22px;
}
@media (max-width: 767px) {
h1 {
font-size: 18px;
}
}
h2 {
font-size: 20px;
}
@media (max-width: 767px) {
h2 {
font-size: 16px;
}
}
h3 {
font-size: 18px;
}
@media (max-width: 767px) {
h3 {
font-size: 14px;
}
}
h4 {
font-size: 16px;
}
@media (max-width: 767px) {
h4 {
font-size: 12px;
}
}
h5 {
font-size: 14px;
}
@media (max-width: 767px) {
h5 {
font-size: 10px;
}
}
h6 {
font-size: 12px;
}
@media (max-width: 767px) {
h6 {
font-size: 8px;
}
}
p {
margin: 0 0 25px 0;
}
a {
color: #555;
text-decoration: none;
border-bottom: 1px solid #999;
word-wrap: break-word;
}
a:hover {
color: #222;
border-bottom-color: #222;
}
ul {
list-style: none;
}
blockquote {
margin: 0;
padding: 0;
}
img {
display: block;
margin: auto;
max-width: 100%;
height: auto;
}
hr {
margin: 40px 0;
height: 3px;
border: none;
background-color: #ddd;
background-image: repeating-linear-gradient(-45deg, #fff, #fff 4px, transparent 4px, transparent 8px);
}
blockquote {
padding: 0 15px;
color: #666;
border-left: 4px solid #ddd;
}
blockquote cite::before {
content: "-";
padding: 0 5px;
}
dt {
font-weight: 700;
}
dd {
margin: 0;
padding: 0;
}
.text-left {
text-align: left;
}
.text-center {
text-align: center;
}
.text-right {
text-align: right;
}
.text-justify {
text-align: justify;
}
.text-nowrap {
white-space: nowrap;
}
.text-lowercase {
text-transform: lowercase;
}
.text-uppercase {
text-transform: uppercase;
}
.text-capitalize {
text-transform: capitalize;
}
.center-block {
display: block;
margin-left: auto;
margin-right: auto;
}
.clearfix:before,
.clearfix:after {
content: " ";
display: table;
}
.clearfix:after {
clear: both;
}
.pullquote {
width: 45%;
}
.pullquote.left {
float: left;
margin-left: 5px;
margin-right: 10px;
}
.pullquote.right {
float: right;
margin-left: 10px;
margin-right: 5px;
}
.affix.affix.affix {
position: fixed;
}
.translation {
margin-top: -20px;
font-size: 14px;
color: #999;
}
.scrollbar-measure {
width: 100px;
height: 100px;
overflow: scroll;
position: absolute;
top: -9999px;
}
.use-motion .motion-element {
opacity: 0;
}
#local-search-input {
padding: 3px;
border: none;
text-indent: 14px;
border-radius: 0;
width: 140px;
outline: none;
border-bottom: 1px solid #999;
background: inherit;
opacity: 0.5;
}
#local-search-input:focus {
opacity: 1;
}
.search-icon {
position: absolute;
top: 9px;
}
table {
margin: 20px 0;
width: 100%;
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #ddd;
font-size: 14px;
table-layout: fixed;
word-wrap: break-all;
}
table>tbody>tr:nth-of-type(odd) {
background-color: #f9f9f9;
}
table>tbody>tr:hover {
background-color: #f5f5f5;
}
caption,
th,
td {
padding: 8px;
text-align: left;
vertical-align: middle;
font-weight: normal;
}
th,
td {
border-bottom: 3px solid #ddd;
border-right: 1px solid #eee;
}
th {
padding-bottom: 10px;
font-weight: 700;
}
td {
border-bottom-width: 1px;
}
html,
body {
height: 100%;
}
.container {
position: relative;
min-height: 100%;
}
.header-inner {
margin: 0 auto;
padding: 100px 0 70px;
width: 700px;
}
@media (min-width: 1600px) {
.container .header-inner {
width: 900px;
}
}
.main {
padding-bottom: 150px;
}
.main-inner {
margin: 0 auto;
width: 700px;
}
@media (min-width: 1600px) {
.container .main-inner {
width: 900px;
}
}
.footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
min-height: 50px;
}
.footer-inner {
box-sizing: border-box;
margin: 20px auto;
width: 700px;
}
@media (min-width: 1600px) {
.container .footer-inner {
width: 900px;
}
}
pre,
.highlight {
overflow: auto;
margin: 20px 0;
padding: 0;
font-size: 13px;
color: #ccc;
background: #2d2d2d;
line-height: 1.6;
}
pre,
code {
font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace;
}
code {
padding: 2px 4px;
word-wrap: break-word;
color: #ccc;
background: #2d2d2d;
border-radius: 3px;
font-size: 13px;
}
pre code {
padding: 0;
color: #ccc;
background: none;
text-shadow: none;
}
.highlight {
border-radius: 1px;
}
.highlight pre {
border: none;
margin: 0;
padding: 10px 0;
}
.highlight table {
margin: 0;
width: auto;
border: none;
}
.highlight td {
border: none;
padding: 0;
}
.highlight figcaption {
font-size: 1em;
color: #ccc;
line-height: 1em;
margin-bottom: 1em;
}
.highlight figcaption:before,
.highlight figcaption:after {
content: " ";
display: table;
}
.highlight figcaption:after {
clear: both;
}
.highlight figcaption a {
float: right;
color: #ccc;
}
.highlight figcaption a:hover {
border-bottom-color: #ccc;
}
.highlight .gutter pre {
padding-left: 10px;
padding-right: 10px;
color: #999;
text-align: right;
background-color: #1b1b1b;
}
.highlight .code pre {
padding-left: 10px;
padding-right: 10px;
background-color: #2d2d2d;
}
.highlight .line {
height: 20px;
}
.gutter {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.gist table {
width: auto;
}
.gist table td {
border: none;
}
pre .deletion {
background: #008000;
}
pre .addition {
background: #800000;
}
pre .meta {
color: #c9c;
}
pre .comment {
color: #999;
}
pre .variable,
pre .attribute,
pre .tag,
pre .regexp,
pre .ruby .constant,
pre .xml .tag .title,
pre .xml .pi,
pre .xml .doctype,
pre .html .doctype,
pre .css .id,
pre .css .class,
pre .css .pseudo {
color: #f2777a;
}
pre .number,
pre .preprocessor,
pre .built_in,
pre .literal,
pre .params,
pre .constant,
pre .command {
color: #f99157;
}
pre .ruby .class .title,
pre .css .rules .attribute,
pre .string,
pre .value,
pre .inheritance,
pre .header,
pre .ruby .symbol,
pre .xml .cdata,
pre .special,
pre .number,
pre .formula {
color: #9c9;
}
pre .title,
pre .css .hexcolor {
color: #6cc;
}
pre .function,
pre .python .decorator,
pre .python .title,
pre .ruby .function .title,
pre .ruby .title .keyword,
pre .perl .sub,
pre .javascript .title,
pre .coffeescript .title {
color: #69c;
}
pre .keyword,
pre .javascript .function {
color: #c9c;
}
.full-image.full-image.full-image {
border: none;
max-width: 100%;
width: auto;
margin: 20px auto;
}
@media (min-width: 992px) {
.full-image.full-image.full-image {
max-width: none;
width: 110%;
margin: 25px -5%;
}
}
.blockquote-center,
.page-home .post-type-quote blockquote,
.page-post-detail .post-type-quote blockquote {
position: relative;
margin: 40px 0;
padding: 0;
border-left: none;
text-align: center;
}
.blockquote-center::before,
.page-home .post-type-quote blockquote::before,
.page-post-detail .post-type-quote blockquote::before,
.blockquote-center::after,
.page-home .post-type-quote blockquote::after,
.page-post-detail .post-type-quote blockquote::after {
position: absolute;
content: ' ';
display: block;
width: 100%;
height: 24px;
opacity: 0.2;
background-repeat: no-repeat;
background-position: 0 -6px;
background-size: 22px 22px;
}
.blockquote-center::before,
.page-home .post-type-quote blockquote::before,
.page-post-detail .post-type-quote blockquote::before {
top: -20px;
background-image: url("../images/quote-l.svg");
border-top: 1px solid #ccc;
}
.blockquote-center::after,
.page-home .post-type-quote blockquote::after,
.page-post-detail .post-type-quote blockquote::after {
bottom: -20px;
background-image: url("../images/quote-r.svg");
border-bottom: 1px solid #ccc;
background-position: 100% 8px;
}
.blockquote-center p,
.page-home .post-type-quote blockquote p,
.page-post-detail .post-type-quote blockquote p,
.blockquote-center div,
.page-home .post-type-quote blockquote div,
.page-post-detail .post-type-quote blockquote div {
text-align: center;
}
.post .post-body .group-picture img {
box-sizing: border-box;
padding: 0 3px;
border: none;
}
.post .group-picture-row {
overflow: hidden;
margin-top: 6px;
}
.post .group-picture-row:first-child {
margin-top: 0;
}
.post .group-picture-column {
float: left;
}
.page-post-detail .post-body .group-picture-column {
float: none;
margin-top: 10px;
width: auto !important;
}
.page-post-detail .post-body .group-picture-column img {
margin: 0 auto;
}
.page-archive .group-picture-container {
overflow: hidden;
}
.page-archive .group-picture-row {
float: left;
}
.page-archive .group-picture-row:first-child {
margin-top: 6px;
}
.page-archive .group-picture-column {
max-width: 150px;
max-height: 150px;
}
.note {
padding: 20px;
margin: 20px 0;
border: 1px solid #eee;
border-left-width: 5px;
border-radius: 3px;
}
.note h2,
.note h3,
.note h4,
.note h5,
.note h6 {
margin-top: 0;
margin-bottom: 5px;
}
.note p:last-child {
margin-bottom: 0;
}
.note code {
border-radius: 3px;
}
.note+.note {
margin-top: -5px;
}
.default {
border-left-color: #777;
}
.default h2,
.default h3,
.default h4,
.default h5,
.default h6 {
color: #777;
}
.primary {
border-left-color: #428bca;
}
.primary h2,
.primary h3,
.primary h4,
.primary h5,
.primary h6 {
color: #428bca;
}
.success {
border-left-color: #5cb85c;
}
.success h2,
.success h3,
.success h4,
.success h5,
.success h6 {
color: #5cb85c;
}
.danger {
border-left-color: #d9534f;
}
.danger h2,
.danger h3,
.danger h4,
.danger h5,
.danger h6 {
color: #d9534f;
}
.warning {
border-left-color: #f0ad4e;
}
.warning h2,
.warning h3,
.warning h4,
.warning h5,
.warning h6 {
color: #f0ad4e;
}
.info {
border-left-color: #5bc0de;
}
.info h2,
.info h3,
.info h4,
.info h5,
.info h6 {
color: #5bc0de;
}
.btn {
display: inline-block;
padding: 0 20px;
font-size: 14px;
color: #fff;
background: #222;
border: 2px solid #222;
text-decoration: none;
border-radius: 0;
transition-property: background-color;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.btn:hover,
.post-more-link .btn:hover {
border-color: #222;
color: #222;
background: #fff;
}
.btn-bar {
display: block;
width: 22px;
height: 2px;
background: #555;
border-radius: 1px;
}
.btn-bar+.btn-bar {
margin-top: 4px;
}
.pagination {
margin: 120px 0 40px;
text-align: center;
border-top: 1px solid #eee;
}
.page-number-basic,
.pagination .prev,
.pagination .next,
.pagination .page-number,
.pagination .space {
display: inline-block;
position: relative;
top: -1px;
margin: 0 10px;
padding: 0 10px;
line-height: 30px;
}
@media (max-width: 767px) {
.page-number-basic,
.pagination .prev,
.pagination .next,
.pagination .page-number,
.pagination .space {
margin: 0 5px;
}
}
.pagination .prev,
.pagination .next,
.pagination .page-number {
border-bottom: 0;
border-top: 1px solid #eee;
transition-property: border-color;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.pagination .prev:hover,
.pagination .next:hover,
.pagination .page-number:hover {
border-top-color: #222;
}
.pagination .space {
padding: 0;
margin: 0;
}
.pagination .prev {
margin-left: 0;
}
.pagination .next {
margin-right: 0;
}
.pagination .page-number.current {
color: #fff;
background: #ccc;
border-top-color: #ccc;
}
@media (max-width: 767px) {
.pagination {
border-top: none;
}
.pagination .prev,
.pagination .next,
.pagination .page-number {
margin-bottom: 10px;
border-top: 0;
border-bottom: 1px solid #eee;
}
.pagination .prev:hover,
.pagination .next:hover,
.pagination .page-number:hover {
border-bottom-color: #222;
}
}
.comments {
margin: 60px 20px 0;
}
.tag-cloud {
text-align: center;
}
.tag-cloud a {
display: inline-block;
margin: 10px;
}
.back-to-top {
box-sizing: border-box;
position: fixed;
bottom: -100px;
right: 50px;
z-index: 1050;
padding: 0 6px;
width: 25px;
background: #222;
font-size: 12px;
opacity: 1;
color: #fff;
cursor: pointer;
text-align: center;
-webkit-transform: translateZ(0);
transition-property: bottom;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
@media (max-width: 767px) {
.back-to-top {
display: none;
}
}
@media (min-width: 768px) and (max-width: 991px) {
.back-to-top {
display: none;
}
}
.back-to-top.back-to-top-on {
bottom: 19px;
}
.header {
background: #fff;
}
.header-inner {
position: relative;
}
.headband {
height: 3px;
background: #222;
}
.site-meta {
margin: 0;
text-align: center;
}
@media (max-width: 767px) {
.site-meta {
text-align: center;
}
}
.brand {
position: relative;
display: inline-block;
padding: 0 40px;
color: #fff;
background: #222;
border-bottom: none;
}
.brand:hover {
color: #fff;
}
.logo {
display: inline-block;
margin-right: 5px;
line-height: 36px;
vertical-align: top;
}
.site-title {
display: inline-block;
vertical-align: top;
line-height: 36px;
font-size: 20px;
font-weight: normal;
font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif;
}
.site-subtitle {
margin-top: 10px;
font-size: 13px;
color: #999;
}
.use-motion .brand {
opacity: 0;
}
.use-motion .logo,
.use-motion .site-title,
.use-motion .site-subtitle {
opacity: 0;
position: relative;
top: -10px;
}
.site-nav-toggle {
display: none;
position: absolute;
top: 10px;
left: 10px;
}
@media (max-width: 767px) {
.site-nav-toggle {
display: block;
}
}
.site-nav-toggle button {
margin-top: 2px;
padding: 9px 10px;
background: transparent;
border: none;
}
@media (max-width: 767px) {
.site-nav {
display: none;
margin: 0 -10px;
padding: 0 10px;
clear: both;
border-top: 1px solid #ddd;
}
}
@media (min-width: 768px) and (max-width: 991px) {
.site-nav {
display: block !important;
}
}
@media (min-width: 992px) {
.site-nav {
display: block !important;
}
}
.menu {
margin-top: 20px;
padding-left: 0;
text-align: center;
}
.menu .menu-item {
display: inline-block;
margin: 0 10px;
}
@media screen and (max-width: 767px) {
.menu .menu-item {
margin-top: 10px;
}
}
.menu .menu-item a {
display: block;
font-size: 13px;
text-transform: capitalize;
line-height: inherit;
border-bottom: 1px solid transparent;
transition-property: border-color;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.menu .menu-item a:hover {
border-bottom-color: #222;
}
.menu .menu-item .fa {
margin-right: 5px;
}
.use-motion .menu-item {
opacity: 0;
}
.post-body {
font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif;
}
@media (max-width: 767px) {
.post-body {
word-break: break-word;
}
}
.post-body .fancybox img {
display: block !important;
margin: 0 auto;
cursor: pointer;
cursor: zoom-in;
cursor: -webkit-zoom-in;
}
.post-body .image-caption,
.post-body .figure .caption {
margin: 10px auto 15px;
text-align: center;
font-size: 14px;
color: #999;
font-weight: bold;
line-height: 1;
}
.post-sticky-flag {
display: inline-block;
font-size: 16px;
-ms-transform: rotate(30deg);
-webkit-transform: rotate(30deg);
-moz-transform: rotate(30deg);
-ms-transform: rotate(30deg);
-o-transform: rotate(30deg);
transform: rotate(30deg);
}
.posts-expand {
padding-top: 40px;
}
@media (max-width: 767px) {
.posts-expand {
margin: 0 20px;
}
.post-body pre,
.post-body .highlight {
padding: 10px;
}
.post-body pre .gutter pre,
.post-body .highlight .gutter pre {
padding-right: 10px;
}
}
@media (min-width: 992px) {
.posts-expand .post-body {
text-align: justify;
}
}
.posts-expand .post-body h2,
.posts-expand .post-body h3,
.posts-expand .post-body h4,
.posts-expand .post-body h5,
.posts-expand .post-body h6 {
padding-top: 10px;
}
.posts-expand .post-body h2 .header-anchor,
.posts-expand .post-body h3 .header-anchor,
.posts-expand .post-body h4 .header-anchor,
.posts-expand .post-body h5 .header-anchor,
.posts-expand .post-body h6 .header-anchor {
float: right;
margin-left: 10px;
color: #ccc;
border-bottom-style: none;
visibility: hidden;
}
.posts-expand .post-body h2 .header-anchor:hover,
.posts-expand .post-body h3 .header-anchor:hover,
.posts-expand .post-body h4 .header-anchor:hover,
.posts-expand .post-body h5 .header-anchor:hover,
.posts-expand .post-body h6 .header-anchor:hover {
color: inherit;
}
.posts-expand .post-body h2:hover .header-anchor,
.posts-expand .post-body h3:hover .header-anchor,
.posts-expand .post-body h4:hover .header-anchor,
.posts-expand .post-body h5:hover .header-anchor,
.posts-expand .post-body h6:hover .header-anchor {
visibility: visible;
}
.posts-expand .post-body ul li {
list-style: circle;
}
.posts-expand .post-body img {
box-sizing: border-box;
margin: auto;
padding: 3px;
border: 1px solid #ddd;
}
.posts-expand .fancybox img {
margin: 0 auto;
}
@media (max-width: 767px) {
.posts-collapse {
margin: 0 20px;
}
.posts-collapse .post-title,
.posts-collapse .post-meta {
display: block;
width: auto;
text-align: left;
}
}
.posts-collapse {
position: relative;
z-index: 1010;
margin-left: 55px;
}
.posts-collapse::after {
content: " ";
position: absolute;
top: 20px;
left: 0;
margin-left: -2px;
width: 4px;
height: 100%;
background: #f5f5f5;
z-index: -1;
}
@media (max-width: 767px) {
.posts-collapse {
margin: 0 20px;
}
}
.posts-collapse .collection-title {
position: relative;
margin: 60px 0;
}
.posts-collapse .collection-title h2 {
margin-left: 20px;
}
.posts-collapse .collection-title small {
color: #bbb;
}
.posts-collapse .collection-title::before {
content: " ";
position: absolute;
left: 0;
top: 50%;
margin-left: -4px;
margin-top: -4px;
width: 8px;
height: 8px;
background: #bbb;
border-radius: 50%;
}
.posts-collapse .post {
margin: 30px 0;
}
.posts-collapse .post-header {
position: relative;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
transition-property: border;
border-bottom: 1px dashed #ccc;
}
.posts-collapse .post-header::before {
content: " ";
position: absolute;
left: 0;
top: 12px;
width: 6px;
height: 6px;
margin-left: -4px;
background: #bbb;
border-radius: 50%;
border: 1px solid #fff;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
transition-property: background;
}
.posts-collapse .post-header:hover {
border-bottom-color: #666;
}
.posts-collapse .post-header:hover::before {
background: #222;
}
.posts-collapse .post-meta {
position: absolute;
font-size: 12px;
left: 20px;
top: 5px;
}
.posts-collapse .post-comments-count {
display: none;
}
.posts-collapse .post-title {
margin-left: 60px;
font-size: 16px;
font-weight: normal;
line-height: inherit;
}
.posts-collapse .post-title::after {
margin-left: 3px;
opacity: 0.6;
}
.posts-collapse .post-title a {
color: #666;
border-bottom: none;
}
.page-home .post-type-quote .post-header,
.page-post-detail .post-type-quote .post-header,
.page-home .post-type-quote .post-tags,
.page-post-detail .post-type-quote .post-tags {
display: none;
}
.posts-expand .post-title {
font-size: 26px;
text-align: center;
word-break: break-word;
font-weight: 400;
}
@media (max-width: 767px) {
.posts-expand .post-title {
font-size: 22px;
}
}
.posts-expand .post-title-link {
display: inline-block;
position: relative;
color: #555;
border-bottom: none;
line-height: 1.2;
vertical-align: top;
}
.posts-expand .post-title-link::before {
content: "";
position: absolute;
width: 100%;
height: 2px;
bottom: 0;
left: 0;
background-color: #000;
visibility: hidden;
-webkit-transform: scaleX(0);
-moz-transform: scaleX(0);
-ms-transform: scaleX(0);
-o-transform: scaleX(0);
transform: scaleX(0);
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.posts-expand .post-title-link:hover::before {
visibility: visible;
-webkit-transform: scaleX(1);
-moz-transform: scaleX(1);
-ms-transform: scaleX(1);
-o-transform: scaleX(1);
transform: scaleX(1);
}
.posts-expand .post-title-link .fa {
font-size: 16px;
}
.posts-expand .post-meta {
margin: 3px 0 60px 0;
color: #999;
font-family: 'Lato', "PingFang SC", "Microsoft YaHei", sans-serif;
font-size: 12px;
text-align: center;
}
.posts-expand .post-meta .post-category-list {
display: inline-block;
margin: 0;
padding: 3px;
}
.posts-expand .post-meta .post-category-list-link {
color: #999;
}
.posts-expand .post-meta .post-description {
font-size: 14px;
margin-top: 2px;
}
.post-meta-divider {
margin: 0 0.5em;
}
.post-meta-item-icon {
margin-right: 3px;
}
@media (min-width: 768px) and (max-width: 991px) {
.post-meta-item-icon {
display: inline-block;
}
}
@media (max-width: 767px) {
.post-meta-item-icon {
display: inline-block;
}
}
@media (min-width: 768px) and (max-width: 991px) {
.post-meta-item-text {
display: none;
}
}
@media (max-width: 767px) {
.post-meta-item-text {
display: none;
}
}
@media (max-width: 767px) {
.posts-expand .post-comments-count {
display: none;
}
}
.post-more-link {
margin-top: 50px;
}
.post-more-link .btn {
color: #fff;
font-size: 14px;
background: #222;
border-radius: 0;
line-height: 2;
margin: 0 4px 8px 4px;
}
.post-more-link .fa-fw {
width: 1.285714285714286em;
text-align: left;
}
.posts-expand .post-tags {
margin-top: 40px;
text-align: center;
}
.posts-expand .post-tags a {
display: inline-block;
margin-right: 10px;
font-size: 13px;
}
.post-nav {
display: table;
margin-top: 60px;
width: 100%;
border-top: 1px solid #eee;
}
.post-nav-divider {
display: table-cell;
width: 10%;
}
.post-nav-item {
display: table-cell;
padding: 10px 0 0 0;
width: 45%;
vertical-align: top;
}
.post-nav-item a {
position: relative;
display: block;
line-height: 25px;
font-size: 14px;
color: #555;
border-bottom: none;
}
.post-nav-item a:hover {
color: #222;
border-bottom: none;
}
.post-nav-item a:active {
top: 2px;
}
.post-nav-item .fa {
position: absolute;
top: 8px;
left: 0;
font-size: 12px;
}
.post-nav-next a {
padding-left: 15px;
}
.post-nav-prev {
text-align: right;
}
.post-nav-prev a {
padding-right: 15px;
}
.post-nav-prev .fa {
right: 0;
left: auto;
}
.posts-expand .post-eof {
display: block;
margin: 80px auto 60px;
width: 8%;
height: 1px;
background: #ccc;
text-align: center;
}
.post:last-child .post-eof.post-eof.post-eof {
display: none;
}
.post-gallery {
display: table;
table-layout: fixed;
width: 100%;
border-collapse: separate;
}
.post-gallery-row {
display: table-row;
}
.post-gallery .post-gallery-img {
display: table-cell;
text-align: center;
vertical-align: middle;
border: none;
}
.post-gallery .post-gallery-img img {
max-width: 100%;
max-height: 100%;
border: none;
}
.fancybox-close,
.fancybox-close:hover {
border: none;
}
#rewardButton {
cursor: pointer;
border: 0;
outline: 0;
border-radius: 100%;
padding: 0;
margin: 0;
letter-spacing: normal;
text-transform: none;
text-indent: 0px;
text-shadow: none;
}
#rewardButton span {
display: inline-block;
width: 80px;
height: 35px;
border-radius: 5px;
color: #fff;
font-weight: 400;
font-style: normal;
font-variant: normal;
font-stretch: normal;
font-size: 18px;
font-family: "Microsoft Yahei";
background: #f44336;
}
#rewardButton span:hover {
background: #f7877f;
}
#QR {
padding-top: 20px;
}
#QR a {
border: 0;
}
#QR img {
width: 180px;
max-width: 100%;
display: inline-block;
margin: 0.8em 2em 0 2em;
}
#wechat:hover p {
animation: roll 0.1s infinite linear;
-webkit-animation: roll 0.1s infinite linear;
-moz-animation: roll 0.1s infinite linear;
}
#alipay:hover p {
animation: roll 0.1s infinite linear;
-webkit-animation: roll 0.1s infinite linear;
-moz-animation: roll 0.1s infinite linear;
}
@-moz-keyframes roll {
from {
-webkit-transform: rotateZ(30deg);
-moz-transform: rotateZ(30deg);
-ms-transform: rotateZ(30deg);
-o-transform: rotateZ(30deg);
transform: rotateZ(30deg);
}
to {
-webkit-transform: rotateZ(-30deg);
-moz-transform: rotateZ(-30deg);
-ms-transform: rotateZ(-30deg);
-o-transform: rotateZ(-30deg);
transform: rotateZ(-30deg);
}
}
@-webkit-keyframes roll {
from {
-webkit-transform: rotateZ(30deg);
-moz-transform: rotateZ(30deg);
-ms-transform: rotateZ(30deg);
-o-transform: rotateZ(30deg);
transform: rotateZ(30deg);
}
to {
-webkit-transform: rotateZ(-30deg);
-moz-transform: rotateZ(-30deg);
-ms-transform: rotateZ(-30deg);
-o-transform: rotateZ(-30deg);
transform: rotateZ(-30deg);
}
}
@-o-keyframes roll {
from {
-webkit-transform: rotateZ(30deg);
-moz-transform: rotateZ(30deg);
-ms-transform: rotateZ(30deg);
-o-transform: rotateZ(30deg);
transform: rotateZ(30deg);
}
to {
-webkit-transform: rotateZ(-30deg);
-moz-transform: rotateZ(-30deg);
-ms-transform: rotateZ(-30deg);
-o-transform: rotateZ(-30deg);
transform: rotateZ(-30deg);
}
}
@keyframes roll {
from {
-webkit-transform: rotateZ(30deg);
-moz-transform: rotateZ(30deg);
-ms-transform: rotateZ(30deg);
-o-transform: rotateZ(30deg);
transform: rotateZ(30deg);
}
to {
-webkit-transform: rotateZ(-30deg);
-moz-transform: rotateZ(-30deg);
-ms-transform: rotateZ(-30deg);
-o-transform: rotateZ(-30deg);
transform: rotateZ(-30deg);
}
}
.my_post_copyright {
width: 85%;
max-width: 45em;
margin: 2.8em auto 0;
padding: 0.5em 1em;
border: 1px solid #d3d3d3;
font-size: 0.93rem;
line-height: 1.6em;
word-break: break-all;
background: rgba(255,255,255,0.4);
}
.my_post_copyright p {
margin: 0;
}
.my_post_copyright span {
display: inline-block;
width: 5.2em;
color: #b5b5b5;
font-weight: bold;
}
.my_post_copyright .raw {
margin-left: 1em;
width: 5em;
}
.my_post_copyright a {
color: #808080;
border-bottom: 0;
}
.my_post_copyright a:hover {
color: #a3d2a3;
text-decoration: underline;
}
.my_post_copyright:hover .fa-clipboard {
color: #000;
}
.my_post_copyright .post-url:hover {
font-weight: normal;
}
.my_post_copyright .copy-path {
margin-left: 1em;
width: 1em;
}
@media (max-width: 767px) {
.my_post_copyright .copy-path {
display: none;
}
}
.my_post_copyright .copy-path:hover {
color: #808080;
cursor: pointer;
}
.sidebar {
position: fixed;
right: 0;
top: 0;
bottom: 0;
width: 0;
z-index: 1040;
box-shadow: inset 0 2px 6px #000;
background: #222;
-webkit-transform: translateZ(0);
}
.sidebar a {
color: #999;
border-bottom-color: #555;
}
.sidebar a:hover {
color: #eee;
}
@media (min-width: 768px) and (max-width: 991px) {
.sidebar {
display: none !important;
}
}
@media (max-width: 767px) {
.sidebar {
display: none !important;
}
}
.sidebar-inner {
position: relative;
padding: 20px 10px;
color: #999;
text-align: center;
}
.sidebar-toggle {
position: fixed;
right: 50px;
bottom: 45px;
width: 15px;
height: 15px;
padding: 5px;
background: #222;
line-height: 0;
z-index: 1050;
cursor: pointer;
-webkit-transform: translateZ(0);
}
@media (min-width: 768px) and (max-width: 991px) {
.sidebar-toggle {
display: none;
}
}
@media (max-width: 767px) {
.sidebar-toggle {
display: none;
}
}
.sidebar-toggle-line {
position: relative;
display: inline-block;
vertical-align: top;
height: 2px;
width: 100%;
background: #fff;
margin-top: 3px;
}
.sidebar-toggle-line:first-child {
margin-top: 0;
}
.site-author-image {
display: block;
margin: 0 auto;
padding: 2px;
max-width: 96px;
height: auto;
border: 2px solid #333;
}
.site-author-name {
margin: 5px 0 0;
text-align: center;
color: #f5f5f5;
font-weight: normal;
}
.site-description {
margin-top: 5px;
text-align: center;
font-size: 14px;
color: #999;
}
.site-state {
overflow: hidden;
line-height: 1.4;
white-space: nowrap;
text-align: center;
}
.site-state-item {
display: inline-block;
padding: 0 15px;
border-left: 1px solid #333;
}
.site-state-item:first-child {
border-left: none;
}
.site-state-item a {
border-bottom: none;
}
.site-state-item-count {
display: block;
text-align: center;
color: inherit;
font-weight: 600;
font-size: 18px;
}
.site-state-item-name {
font-size: 13px;
color: inherit;
}
.feed-link {
margin-top: 20px;
}
.feed-link a {
display: inline-block;
padding: 0 15px;
color: #fc6423;
border: 1px solid #fc6423;
border-radius: 4px;
}
.feed-link a i {
color: #fc6423;
font-size: 14px;
}
.feed-link a:hover {
color: #fff;
background: #fc6423;
}
.feed-link a:hover i {
color: #fff;
}
.links-of-author {
margin-top: 20px;
}
.links-of-author a {
display: inline-block;
vertical-align: middle;
margin-right: 10px;
margin-bottom: 10px;
border-bottom-color: #555;
font-size: 13px;
}
.links-of-author a:before {
display: inline-block;
vertical-align: middle;
margin-right: 3px;
content: " ";
width: 4px;
height: 4px;
border-radius: 50%;
background: #1698a1;
}
.links-of-blogroll {
font-size: 13px;
}
.links-of-blogroll-title {
margin-top: 20px;
font-size: 14px;
font-weight: 600;
}
.links-of-blogroll-list {
margin: 0;
padding: 0;
}
.links-of-blogroll-item {
padding: 2px 10px;
}
.sidebar-nav {
margin: 0 0 20px;
padding-left: 0;
}
.sidebar-nav li {
display: inline-block;
cursor: pointer;
border-bottom: 1px solid transparent;
font-size: 14px;
color: #555;
}
.sidebar-nav li:hover {
color: #f5f5f5;
}
.page-post-detail .sidebar-nav-toc {
padding: 0 5px;
}
.page-post-detail .sidebar-nav-overview {
margin-left: 10px;
}
.sidebar-nav .sidebar-nav-active {
color: #87daff;
border-bottom-color: #87daff;
}
.sidebar-nav .sidebar-nav-active:hover {
color: #87daff;
}
.sidebar-panel {
display: none;
}
.sidebar-panel-active {
display: block;
}
.post-toc-empty {
font-size: 14px;
color: #666;
}
.post-toc-wrap {
overflow: hidden;
}
.post-toc {
overflow: auto;
}
.post-toc ol {
margin: 0;
padding: 0 2px 5px 10px;
text-align: left;
list-style: none;
font-size: 14px;
}
.post-toc ol > ol {
padding-left: 0;
}
.post-toc ol a {
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
transition-property: all;
color: #999;
border-bottom-color: #555;
}
.post-toc ol a:hover {
color: #ccc;
border-bottom-color: #ccc;
}
.post-toc .nav-item {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 1.8;
}
.post-toc .nav .nav-child {
display: none;
}
.post-toc .nav .active > .nav-child {
display: block;
}
.post-toc .nav .active-current > .nav-child {
display: block;
}
.post-toc .nav .active-current > .nav-child > .nav-item {
display: block;
}
.post-toc .nav .active > a {
color: #87daff;
border-bottom-color: #87daff;
}
.post-toc .nav .active-current > a {
color: #87daff;
}
.post-toc .nav .active-current > a:hover {
color: #87daff;
}
.footer {
font-size: 14px;
color: #999;
}
.footer img {
border: none;
}
.footer-inner {
text-align: center;
}
.with-love {
display: inline-block;
margin: 0 5px;
}
.powered-by,
.theme-info {
display: inline-block;
}
.powered-by {
margin-right: 10px;
}
.powered-by::after {
content: "|";
padding-left: 10px;
}
.cc-license {
margin-top: 10px;
text-align: center;
}
.cc-license .cc-opacity {
opacity: 0.7;
border-bottom: none;
}
.cc-license .cc-opacity:hover {
opacity: 0.9;
}
.cc-license img {
display: inline-block;
}
.theme-next #ds-thread #ds-reset {
color: #555;
}
.theme-next #ds-thread #ds-reset .ds-replybox {
margin-bottom: 30px;
}
.theme-next #ds-thread #ds-reset .ds-replybox .ds-avatar,
.theme-next #ds-reset .ds-avatar img {
box-shadow: none;
}
.theme-next #ds-thread #ds-reset .ds-textarea-wrapper {
border-color: #c7d4e1;
background: none;
border-top-right-radius: 3px;
border-top-left-radius: 3px;
}
.theme-next #ds-thread #ds-reset .ds-textarea-wrapper textarea {
height: 60px;
}
.theme-next #ds-reset .ds-rounded-top {
border-radius: 0;
}
.theme-next #ds-thread #ds-reset .ds-post-toolbar {
box-sizing: border-box;
border: 1px solid #c7d4e1;
background: #f6f8fa;
}
.theme-next #ds-thread #ds-reset .ds-post-options {
height: 40px;
border: none;
background: none;
}
.theme-next #ds-thread #ds-reset .ds-toolbar-buttons {
top: 11px;
}
.theme-next #ds-thread #ds-reset .ds-sync {
top: 5px;
}
.theme-next #ds-thread #ds-reset .ds-post-button {
top: 4px;
right: 5px;
width: 90px;
height: 30px;
border: 1px solid #c5ced7;
border-radius: 3px;
background-image: linear-gradient(#fbfbfc, #f5f7f9);
color: #60676d;
}
.theme-next #ds-thread #ds-reset .ds-post-button:hover {
background-position: 0 -30px;
color: #60676d;
}
.theme-next #ds-thread #ds-reset .ds-comments-info {
padding: 10px 0;
}
.theme-next #ds-thread #ds-reset .ds-sort {
display: none;
}
.theme-next #ds-thread #ds-reset li.ds-tab a.ds-current {
border: none;
background: #f6f8fa;
color: #60676d;
}
.theme-next #ds-thread #ds-reset li.ds-tab a.ds-current:hover {
background-color: #e9f0f7;
color: #60676d;
}
.theme-next #ds-thread #ds-reset li.ds-tab a {
border-radius: 2px;
padding: 5px;
}
.theme-next #ds-thread #ds-reset .ds-login-buttons p {
color: #999;
line-height: 36px;
}
.theme-next #ds-thread #ds-reset .ds-login-buttons .ds-service-list li {
height: 28px;
}
.theme-next #ds-thread #ds-reset .ds-service-list a {
background: none;
padding: 5px;
border: 1px solid;
border-radius: 3px;
text-align: center;
}
.theme-next #ds-thread #ds-reset .ds-service-list a:hover {
color: #fff;
background: #666;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-weibo {
color: #fc9b00;
border-color: #fc9b00;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-weibo:hover {
background: #fc9b00;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-qq {
color: #60a3ec;
border-color: #60a3ec;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-qq:hover {
background: #60a3ec;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-renren {
color: #2e7ac4;
border-color: #2e7ac4;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-renren:hover {
background: #2e7ac4;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-douban {
color: #37994c;
border-color: #37994c;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-douban:hover {
background: #37994c;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-kaixin {
color: #fef20d;
border-color: #fef20d;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-kaixin:hover {
background: #fef20d;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-netease {
color: #f00;
border-color: #f00;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-netease:hover {
background: #f00;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-sohu {
color: #ffcb05;
border-color: #ffcb05;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-sohu:hover {
background: #ffcb05;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-baidu {
color: #2831e0;
border-color: #2831e0;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-baidu:hover {
background: #2831e0;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-google {
color: #166bec;
border-color: #166bec;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-google:hover {
background: #166bec;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-weixin {
color: #00ce0d;
border-color: #00ce0d;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-weixin:hover {
background: #00ce0d;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-more-services {
border: none;
}
.theme-next #ds-thread #ds-reset .ds-service-list .ds-more-services:hover {
background: none;
}
.theme-next #ds-reset .duoshuo-ua-admin {
display: inline-block;
color: #f00;
}
.theme-next #ds-reset .duoshuo-ua-platform,
.theme-next #ds-reset .duoshuo-ua-browser {
color: #ccc;
}
.theme-next #ds-reset .duoshuo-ua-platform .fa,
.theme-next #ds-reset .duoshuo-ua-browser .fa {
display: inline-block;
margin-right: 3px;
}
.theme-next #ds-reset .duoshuo-ua-separator {
display: inline-block;
margin-left: 5px;
}
.theme-next .this_ua {
background-color: #ccc !important;
border-radius: 4px;
padding: 0 5px !important;
margin: 1px 1px !important;
border: 1px solid #bbb !important;
color: #fff;
display: inline-block !important;
}
.theme-next .this_ua.admin {
background-color: #d9534f !important;
border-color: #d9534f !important;
}
.theme-next .this_ua.platform.iOS,
.theme-next .this_ua.platform.Mac,
.theme-next .this_ua.platform.Windows {
background-color: #39b3d7 !important;
border-color: #46b8da !important;
}
.theme-next .this_ua.platform.Linux {
background-color: #3a3a3a !important;
border-color: #1f1f1f !important;
}
.theme-next .this_ua.platform.Android {
background-color: #00c47d !important;
border-color: #01b171 !important;
}
.theme-next .this_ua.browser.Mobile,
.theme-next .this_ua.browser.Chrome {
background-color: #5cb85c !important;
border-color: #4cae4c !important;
}
.theme-next .this_ua.browser.Firefox {
background-color: #f0ad4e !important;
border-color: #eea236 !important;
}
.theme-next .this_ua.browser.Maxthon,
.theme-next .this_ua.browser.IE {
background-color: #428bca !important;
border-color: #357ebd !important;
}
.theme-next .this_ua.browser.baidu,
.theme-next .this_ua.browser.UCBrowser,
.theme-next .this_ua.browser.Opera {
background-color: #d9534f !important;
border-color: #d43f3a !important;
}
.theme-next .this_ua.browser.Android,
.theme-next .this_ua.browser.QQBrowser {
background-color: #78ace9 !important;
border-color: #4cae4c !important;
}
.cloud-tie-wrapper img {
display: inline-block;
}
.cloud-tie-wrapper .total-txt {
font-size: 1em !important;
}
.cloud-tie-join-count .join-count {
color: #555 !important;
font-size: inherit !important;
margin: 0 !important;
}
.post-spread {
margin-top: 20px;
text-align: center;
}
.jiathis_style {
display: inline-block;
}
.jiathis_style a {
border: none;
}
.post-spread {
margin-top: 20px;
text-align: center;
}
.bdshare-slide-button-box a {
border: none;
}
.bdsharebuttonbox {
display: inline-block;
}
.bdsharebuttonbox a {
border: none;
}
ul.search-result-list {
padding-left: 0px;
margin: 0px 5px 0px 8px;
}
p.search-result {
border-bottom: 1px dashed #ccc;
padding: 5px 0;
}
a.search-result-title {
font-weight: bold;
}
a.search-result {
border-bottom: transparent;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.search-keyword {
border-bottom: 1px dashed #f00;
font-size: 14px;
font-weight: bold;
color: #f00;
}
#local-search-result {
height: 88%;
overflow: auto;
}
.popup {
display: none;
position: fixed;
top: 10%;
left: 50%;
width: 700px;
height: 80%;
margin-left: -350px;
padding: 3px 0 0 10px;
background: #fff;
color: #333;
z-index: 9999;
border-radius: 5px;
}
@media (max-width: 767px) {
.popup {
padding: 3px;
top: 0;
left: 0;
margin: 0;
width: 100%;
height: 100%;
border-radius: 0px;
}
}
.popoverlay {
position: fixed;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
z-index: 2080;
background-color: rgba(0,0,0,0.3);
}
#local-search-input {
margin-bottom: 10px;
padding: 10px;
width: 97%;
font-size: 18px;
}
.popup .fa-search {
padding-top: 8px;
}
.popup-btn-close {
position: absolute;
top: 6px;
right: 14px;
color: #4ebd79;
font-size: 14px;
font-weight: bold;
text-transform: uppercase;
cursor: pointer;
}
#no-result {
position: absolute;
left: 44%;
top: 42%;
color: #ccc;
}
.site-uv,
.site-pv,
.page-pv {
display: inline-block;
}
.site-uv .busuanzi-value,
.site-pv .busuanzi-value,
.page-pv .busuanzi-value {
margin: 0 5px;
}
.site-uv {
margin-right: 10px;
}
.site-uv::after {
content: "|";
padding-left: 10px;
}
.use-motion .post {
opacity: 0;
}
.page-archive .archive-page-counter {
position: relative;
top: 3px;
left: 20px;
}
@media (max-width: 767px) {
.page-archive .archive-page-counter {
top: 5px;
}
}
.page-archive .posts-collapse .archive-move-on {
position: absolute;
top: 11px;
left: 0;
margin-left: -6px;
width: 10px;
height: 10px;
opacity: 0.5;
background: #555;
border: 1px solid #fff;
border-radius: 50%;
}
.category-all-page .category-all-title {
text-align: center;
}
.category-all-page .category-all {
margin-top: 20px;
}
.category-all-page .category-list {
margin: 0;
padding: 0;
list-style: none;
}
.category-all-page .category-list-item {
margin: 5px 10px;
}
.category-all-page .category-list-count {
color: #bbb;
}
.category-all-page .category-list-count:before {
display: inline;
content: " (";
}
.category-all-page .category-list-count:after {
display: inline;
content: ") ";
}
.category-all-page .category-list-child {
padding-left: 10px;
}
#schedule ul#event-list {
padding-left: 30px;
}
#schedule ul#event-list hr {
margin: 20px 0 45px 0 !important;
background: #222;
}
#schedule ul#event-list hr:after {
display: inline-block;
content: 'NOW';
background: #222;
color: #fff;
font-weight: bold;
text-align: right;
padding: 0 5px;
}
#schedule ul#event-list li.event {
margin: 20px 0px;
background: #f9f9f9;
padding-left: 10px;
min-height: 40px;
}
#schedule ul#event-list li.event h2.event-summary {
margin: 0;
padding-bottom: 3px;
}
#schedule ul#event-list li.event h2.event-summary:before {
display: inline-block;
font-family: FontAwesome;
font-size: 8px;
content: '\f111';
vertical-align: middle;
margin-right: 25px;
color: #bbb;
}
#schedule ul#event-list li.event span.event-relative-time {
display: inline-block;
font-size: 12px;
font-weight: 400;
padding-left: 12px;
color: #bbb;
}
#schedule ul#event-list li.event span.event-details {
display: block;
color: #bbb;
margin-left: 56px;
padding-top: 3px;
padding-bottom: 6px;
text-indent: -24px;
line-height: 18px;
}
#schedule ul#event-list li.event span.event-details:before {
text-indent: 0;
display: inline-block;
width: 14px;
font-family: FontAwesome;
text-align: center;
margin-right: 9px;
color: #bbb;
}
#schedule ul#event-list li.event span.event-details.event-location:before {
content: '\f041';
}
#schedule ul#event-list li.event span.event-details.event-duration:before {
content: '\f017';
}
#schedule ul#event-list li.event-past {
background: #fcfcfc;
}
#schedule ul#event-list li.event-past > * {
opacity: 0.6;
}
#schedule ul#event-list li.event-past h2.event-summary {
color: #bbb;
}
#schedule ul#event-list li.event-past h2.event-summary:before {
color: #dfdfdf;
}
#schedule ul#event-list li.event-now {
background: #222;
color: #fff;
padding: 15px 0 15px 10px;
}
#schedule ul#event-list li.event-now h2.event-summary:before {
-webkit-transform: scale(1.2);
-moz-transform: scale(1.2);
-ms-transform: scale(1.2);
-o-transform: scale(1.2);
transform: scale(1.2);
color: #fff;
animation: dot-flash 1s alternate infinite ease-in-out;
}
#schedule ul#event-list li.event-now * {
color: #fff !important;
}
@-moz-keyframes dot-flash {
from {
opacity: 1;
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
to {
opacity: 0;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
}
}
@-webkit-keyframes dot-flash {
from {
opacity: 1;
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
to {
opacity: 0;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
}
}
@-o-keyframes dot-flash {
from {
opacity: 1;
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
to {
opacity: 0;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
}
}
@keyframes dot-flash {
from {
opacity: 1;
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
to {
opacity: 0;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
}
}
.page-post-detail .sidebar-toggle-line {
background: #87daff;
}
.page-post-detail .comments {
overflow: hidden;
}
@media (max-width: 767px) {
.header-inner,
.container .main-inner,
.footer-inner {
width: auto;
}
}
embed {
display: block;
margin: 0px auto 25px auto;
}
.custom-logo .site-meta-headline {
text-align: center;
}
.custom-logo .brand {
background: none;
}
.custom-logo .site-title {
margin: 10px auto 0;
font-size: 24px;
color: #222;
}
.custom-logo .site-title a {
border: none;
}
.custom-logo-image {
margin: 0 auto;
padding: 5px;
max-width: 150px;
background: #fff;
}
@media (max-width: 767px) {
.site-nav {
position: absolute;
left: 0;
top: 52px;
margin: 0;
width: 100%;
padding: 0;
background: #fff;
border-bottom: 1px solid #ddd;
z-index: 1;
}
}
@media (max-width: 767px) {
.menu {
text-align: left;
}
}
@media (max-width: 767px) {
.menu .menu-item {
display: block;
margin: 0 10px;
vertical-align: top;
}
}
@media (max-width: 767px) {
.menu .menu-item br {
display: none;
}
}
@media (max-width: 767px) {
.menu .menu-item a {
padding: 5px 10px;
}
}
.menu .menu-item .fa {
margin-right: 0;
}
.site-search form {
display: none;
}
.links-of-blogroll-inline .links-of-blogroll-item {
display: inline-block;
}
================================================
FILE: test.py
================================================
# -*- coding: utf-8 -*-
__author__ = 'CoolCat'
import asyncio
from pyppeteer import launch
async def screenshot(url):
browser = await launch(headless=True)
page = await browser.newPage()
await page.setViewport({'width': 1920, 'height': 1080})
await page.goto(url)
imageName = url.replace("https://", "").replace("http://", "").replace("/","") + ".png"
await page.screenshot({'path': imageName})
await browser.close()
url = 'http://www.qq.com/'
asyncio.get_event_loop().run_until_complete(screenshot(url))
================================================
FILE: urls.txt
================================================
club.qq.com
users.qq.com
dui.vip.qq.com
feeds.qq.com
www.qq.com
app.qq.com
de.qq.com
es.qq.com
cs.qq.com
dd.qq.com
es.qq.com
p21.tcdn.qq.com
ss.qq.com
blog.qq.com
cn.qq.com
http.qq.com
h6.qq.com
h2.qq.com
corp.qq.com
sites.qq.com
news.qq.com
class.qq.com
h2.tc.qq.com
ss.qq.com
my.qq.com
a.qq.com
local.qq.com
cp.qq.com
x2.tc.qq.com
server.qq.com
x2.tcdn.qq.com
music.qq.com
en.qq.com
new.qq.com
a.qq.com
https.qq.com
union.qq.com
mail.qq.com
e.qq.com
s.qq.com
games.qq.com
help.qq.com
music.tc.qq.com
aq.qq.com
u.qq.com
p21.tc.qq.com
support.qq.com
tgw.cdc.qq.com
task.qq.com
edu.qq.com
music.tcdn.qq.com
ssd.tc.qq.com
ssd.tcdn.qq.com
dy.qq.com
uni.qq.com
ue.qq.com
media.qq.com
office.qq.com
pp.qq.com
astro.qq.com
uni.mp.qq.com
bbs.qq.com
member.qq.com
ar.qq.com
tuan.qq.com
aps0550.qq.com
v.qq.com
moto.qq.com
ab.qq.com
fr.qq.com
h5.qq.com
ns1.qq.com
web.qq.com
video.qq.com
web2.qq.com
is.qq.com
start.qq.com
sms.qq.com
data.qq.com
p.qq.com
intl.qq.com
platform.qq.com
id.qq.com
doc.qq.com
open.qq.com
hd.qq.com
vip.qq.com
b.qq.com
sc.qq.com
th.qq.com
translate.qq.com
life.qq.com
cms.qq.com
audiodetect.browser.qq.com
auto.qq.com
om.qq.com
om.qq.com
ta.qq.com
ok.qq.com
m.qq.com
biz.qq.com
scc.qq.com
open.book.qq.com
nr.yuewen.qq.com
007.qq.com
i.qq.com
home.qq.com
passport.qq.com
cge.qq.com
king.qq.com
ac.qq.com
best.qq.com
spaces.qq.com
ap.qq.com
guid.qq.com
living.qq.com
114.qq.com
hr.qq.com
res.qq.com
ic.qq.com
cat.qq.com
love.qq.com
pb.qq.com
city.qq.com
tu.qq.com
vp.qq.com
d.qq.com
ui.qq.com
dcloud.qq.com
tourism.qq.com
llk.qq.com
ideas.qq.com
1.qq.com
ads.qq.com
rdm.qq.com
jobs.qq.com
bt.qq.com
linux.qq.com
group.qq.com
book.qq.com
pages.book.qq.com
dns.qq.com
now.qq.com
safe.qq.com
root.qq.com
imp.qq.com
platform.cms.qq.com
cafe.qq.com
victor.qq.com
forwardsh.qq.com
bd.qq.com
mga.qq.com
dl.qq.com
live.qq.com
dl.tcdn.qq.com
download.qq.com
jump.qq.com
fun.qq.com
ptlogin4.qq.com
des.qq.com
emperor.qq.com
t.qq.com
photo.qq.com
account.qq.com
hotel.qq.com
idata.qq.com
student.qq.com
act.go.qq.com
hera.qq.com
bs.qq.com
bs.qq.com
dl1023.tcdn.qq.com
mobile.qq.com
szsj.cname.qq.com
signup.qq.com
zc2.qq.com
art.qq.com
apple.qq.com
idesign.qq.com
service.qq.com
happy.qq.com
app.happy.qq.com
gu.qq.com
ino.qq.com
hi.qq.com
qqhaoma.qq.com
nl.qq.com
neirong.qq.com
r.qq.com
r.mail.qq.com
haoma.qq.com
tt.qq.com
journal.qq.com
cool.qq.com
w.qq.com
penguin.qq.com
nextradio.qq.com
just.qq.com
abc.qq.com
sogou.proxy.qq.com
pic.qq.com
image.qq.com
memo.qq.com
tcc.qq.com
yoyo.qq.com
yoyo.qq.com
otherbdomain.x2stdns.tcdn.qq.com
easy.qq.com
social.qq.com
anke.qq.com
ns4.qq.com
ts1.qq.com
john.qq.com
test.qq.com
vv.video.qq.com
gp.qq.com
gp.qq.com
sj.qq.com
ajax.qq.com
bof.qq.com
maps.qq.com
map.qq.com
athena.qq.com
pictures.qq.com
nc.qq.com
file.qq.com
bm.qq.com
email.qq.com
bz.qq.com
ec.qq.com
smc.qq.com
dc.qq.com
security.qq.com
fw.qq.com
fi.qq.com
read.qq.com
gt.qq.com
s.plcloud.music.qq.com
vm.qq.com
mq.qq.com
fm.qq.com
mx1.qq.com
hk.qq.com
im.qq.com
fk.qq.com
sandbox.api.unipay.qq.com
designer.qq.com
wallet.qq.com
pay.qq.com
l.qq.com
ke.qq.com
lr.qq.com
bug.qq.com
syba.3g.qq.com
mp.qq.com
g.qq.com
enterprise.qq.com
supplier.qq.com
nr.qq.com
qzs.tc.qq.com
apps.qq.com
source.qq.com
qmail.qq.com
py.qq.com
se.qq.com
tp.qq.com
common.mail.qq.com
sb.qq.com
crm.qq.com
tw.qq.com
register.qq.com
reg.qq.com
wa.qq.com
log.qq.com
ws.qq.com
wa.qq.com
wa.qq.com
kg.qq.com
p1.tcdn.qq.com
page.qq.com
ns3.qq.com
win.qq.com
ns2.qq.com
b2b.qq.com
ag.qq.com
pop.qq.com
disk.qq.com
weiyun.qq.com
imap.qq.com
smtp.qq.com
wx.qq.com
sso.qq.com
wx1.qq.com
down.qq.com
dlied1.tcdn.qq.com
job.qq.com
cloud.qq.com
gb.qq.com
mx2.qq.com
dns2.qq.com
weixin.qq.com
sp.qq.com
yun.qq.com
wh.qq.com
dianhua.qq.com
wp.qq.com
origin.qq.com
minigame.qq.com
nd.qq.com
code.qq.com
minigame.tc.qq.com
rtx.qq.com
others.x2.tc.qq.com
yuanchuang.book.qq.com
cj.qq.com
hao.qq.com
wecode.qq.com
mx3.qq.com
q.qq.com
iphone.qq.com
fx.qq.com
law.qq.com
meeting.qq.com
hy.qq.com
act.qq.com
ex.qq.com
kf.qq.com
wb.qq.com
password.qq.com
em.qq.com
join.qq.com
school.qq.com
mb.qq.com
xh.qq.com
pengyou.qq.com
dw.qq.com
sdc.qq.com
mta.qq.com
horizon.qq.com
play.qq.com
acc.qq.com
dt.qq.com
wns.qq.com
tb.qq.com
xt.qq.com
lm.qq.com
jz.qq.com
wei.qq.com
pd.qq.com
weishi.qq.com
c.t.qq.com
film.qq.com
recruit.qq.com
volunteer.qq.com
sas.qq.com
cb.qq.com
compass.qq.com
888.qq.com
guide.qq.com
reader.qq.com
i.weread.qq.com
editor.qq.com
ssp.qq.com
xg.qq.com
webproxy.qq.com
pilot.qq.com
idea.qq.com
player.qq.com
player.qq.com
magic.qq.com
weibo.qq.com
jg.qq.com
w.t.qq.com
proxy.t.qq.com
find.qq.com
we.qq.com
newcomm.weixin.qq.com
qt.qq.com
mark.qq.com
un.qq.com
asset.qq.com
keys.qq.com
trace.qq.com
btrace.qq.com
chart.qq.com
yd.qq.com
aurora.qq.com
imc.qq.com
moss.qq.com
zc.qq.com
tts.qq.com
comic.qq.com
cdc.qq.com
tips.qq.com
panda.qq.com
youtu.qq.com
iso.qq.com
explore.qq.com
ti.qq.com
rz.qq.com
lj.qq.com
pac.qq.com
nba.qq.com
offline.qq.com
qb.qq.com
p2p.qq.com
zf.qq.com
fg.qq.com
te.qq.com
exmail.qq.com
tea.qq.com
skynet.qq.com
muse.qq.com
album.qq.com
hzp.qq.com
exp.qq.com
pix.qq.com
l2.qq.com
android.reader.qq.com
csa.qq.com
v5.qq.com
tcs.qq.com
verify.qq.com
mam.qq.com
esc.qq.com
face.qq.com
run.qq.com
ting.qq.com
bao.qq.com
device.qq.com
cdm.qq.com
etest.qq.com
fanli.qq.com
story.qq.com
urban.qq.com
zd.qq.com
jia.qq.com
notice.qq.com
dmc.qq.com
lottery.qq.com
wx2.qq.com
sjb.qq.com
gongyi.qq.com
midas.qq.com
test.888.qq.com
m.888.qq.com
gitextract_80hm6apt/ ├── .gitattributes ├── README.md ├── main.py ├── template.htm ├── template_files/ │ └── main.css ├── test.py └── urls.txt
SYMBOL INDEX (7 symbols across 2 files) FILE: main.py function getIP (line 95) | def getIP(domain): function getInfo (line 100) | def getInfo(res): function scanurl (line 114) | def scanurl(url): function urlformat (line 121) | def urlformat(site): function outPut (line 131) | def outPut(target, title, imageName): function screenshot (line 154) | async def screenshot(url): FILE: test.py function screenshot (line 9) | async def screenshot(url):
Condensed preview — 7 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (74K chars).
[
{
"path": ".gitattributes",
"chars": 93,
"preview": "*.js linguist-language=python\n*.css linguist-language=python\n*.html linguist-language=python\n"
},
{
"path": "README.md",
"chars": 378,
"preview": "# domain_screen\n\n批量采集站点基础信息&截图。\n\n## log\n\n20190726:修复截图过大导致的网络超时问题及简化使用,支持批量截图,截图完的域名列表会直接移到finished目录。(需要截图的域名列表放在根目录下即可"
},
{
"path": "main.py",
"chars": 9334,
"preview": "# -*- coding: utf-8 -*-\n\n__author__ = 'CoolCat'\n\nimport asyncio\nfrom pyppeteer import launch\nimport sys\nimport shutil\n\n#"
},
{
"path": "template.htm",
"chars": 2985,
"preview": "<!DOCTYPE html>\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n <link href=\"./template_fi"
},
{
"path": "template_files/main.css",
"chars": 49900,
"preview": "/* normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-ad"
},
{
"path": "test.py",
"chars": 536,
"preview": "# -*- coding: utf-8 -*-\n\n__author__ = 'CoolCat'\n\nimport asyncio\nfrom pyppeteer import launch\n\n\nasync def screenshot(url)"
},
{
"path": "urls.txt",
"chars": 5446,
"preview": "club.qq.com\nusers.qq.com\ndui.vip.qq.com\nfeeds.qq.com\nwww.qq.com\napp.qq.com\nde.qq.com\nes.qq.com\ncs.qq.com\ndd.qq.com\nes.qq"
}
]
About this extraction
This page contains the full source code of the TheKingOfDuck/domain_screen GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 7 files (67.1 KB), approximately 21.3k tokens, and a symbol index with 7 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.