项目初始化
This commit is contained in:
commit
dfede5f6df
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/tmp
|
||||
/driver
|
||||
*.pyc
|
2
README.MD
Normal file
2
README.MD
Normal file
@ -0,0 +1,2 @@
|
||||
### chrome driver 下载地址
|
||||
https://googlechromelabs.github.io/chrome-for-testing/#stable
|
BIN
headless_result.png
Normal file
BIN
headless_result.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 583 KiB |
38
main.py
Normal file
38
main.py
Normal file
@ -0,0 +1,38 @@
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
import time
|
||||
|
||||
import utils
|
||||
|
||||
options = webdriver.ChromeOptions()
|
||||
options.add_argument('lang=zh-CN')
|
||||
options.add_argument(
|
||||
'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36')
|
||||
# options.add_argument('--user-data-dir=./UserData/Google/Chrome/Default')
|
||||
options.add_argument('--disable-gpu') # 如果不加这个选项,有时定位会出现问题
|
||||
# options.add_argument('--headless') # 增加无界面选项
|
||||
|
||||
service = webdriver.ChromeService(r"./driver/chromedriver.exe")
|
||||
driver = webdriver.Chrome(service=service,options=options)
|
||||
driver.maximize_window()
|
||||
# driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
|
||||
# "source": """
|
||||
# Object.defineProperty(navigator, 'webdriver', {
|
||||
# get: () => undefined
|
||||
# })
|
||||
# """
|
||||
# })
|
||||
with open("./stealth.min.js") as f:
|
||||
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
|
||||
"source": f.read()
|
||||
})
|
||||
|
||||
driver.get("https://bot.sannysoft.com/")
|
||||
time.sleep(5)
|
||||
width = driver.execute_script("return document.documentElement.scrollWidth")
|
||||
height = driver.execute_script("return document.documentElement.scrollHeight")
|
||||
print(width, height)
|
||||
utils.screenshot(driver=driver, save_path="./screenshot.png")
|
||||
driver.set_window_size(width, height)
|
||||
driver.save_screenshot('result.png')
|
||||
time.sleep(30)
|
BIN
result.png
Normal file
BIN
result.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
BIN
screenshot.png
Normal file
BIN
screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 384 KiB |
7
stealth.min.js
vendored
Normal file
7
stealth.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
49
utils/__init__.py
Normal file
49
utils/__init__.py
Normal file
@ -0,0 +1,49 @@
|
||||
from selenium.webdriver.remote.webdriver import WebDriver
|
||||
from selenium.webdriver.common.by import By
|
||||
from PIL import Image
|
||||
import time
|
||||
import os
|
||||
_scroll_to_bottom = "window.scroll({top:document.body.clientHeight,left:0,behavior:'auto'});"
|
||||
_scroll_to_y = "window.scroll({top:%d,left:0,behavior:'auto'});"
|
||||
_tmp_dir = "./tmp"
|
||||
_tmp_file = "%s/%%s_%%s.png" % _tmp_dir
|
||||
_body = "//body"
|
||||
def screenshot(driver:WebDriver, save_path):
|
||||
file_name = os.path.basename(save_path)
|
||||
if not os.path.exists(_tmp_dir):
|
||||
os.mkdir(_tmp_dir)
|
||||
|
||||
tmp_file_list = []
|
||||
try:
|
||||
tmp_file = _tmp_file % (file_name, 0)
|
||||
driver.save_screenshot(tmp_file)
|
||||
tmp_file_list.append(tmp_file)
|
||||
body_h = driver.execute_script("return document.documentElement.scrollHeight")
|
||||
current_h = driver.execute_script("return document.documentElement.clientHeight")
|
||||
for i in range(1, int(body_h / current_h)):
|
||||
driver.execute_script(_scroll_to_y % (current_h * i))
|
||||
time.sleep(0.2)
|
||||
driver.save_screenshot(_tmp_file % (file_name, i))
|
||||
tmp_file_list.append(_tmp_file % (file_name, i))
|
||||
merge_images(tmp_file, _tmp_file % (file_name, i), tmp_file)
|
||||
|
||||
driver.execute_script(_scroll_to_bottom)
|
||||
end_file = _tmp_file % (file_name, "bottom")
|
||||
driver.save_screenshot(end_file)
|
||||
tmp_file_list.append(end_file)
|
||||
merge_images(tmp_file, end_file,save_path,int(current_h - int(body_h % current_h)))
|
||||
finally:
|
||||
# 删除临时文件
|
||||
for tmp in tmp_file_list:
|
||||
os.remove(tmp)
|
||||
|
||||
|
||||
def merge_images(image1: str, image2: str,output: str,overlap_size=0):
|
||||
size = overlap_size * 2
|
||||
img1,img2 = Image.open(image1), Image.open(image2)
|
||||
size1, size2 = img1.size, img2.size
|
||||
merge = Image.new("RGB", (size1[0], size1[1] + size2[1] - size))
|
||||
loc1, loc2 = (0, 0), (0, size1[1] - size)
|
||||
merge.paste(img1, loc1)
|
||||
merge.paste(img2, loc2)
|
||||
merge.save(output)
|
Loading…
Reference in New Issue
Block a user