mirror of
https://github.com/NaiboWang/EasySpider.git
synced 2025-04-12 03:27:08 +08:00
Specified User Folder
This commit is contained in:
parent
f7a842eed6
commit
d7ccb22d01
@ -31,7 +31,6 @@ from selenium.webdriver.common.action_chains import ActionChains
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
from selenium.webdriver.chrome.service import Service
|
||||
from pynput.keyboard import Key, Listener
|
||||
from datetime import datetime
|
||||
import io # 遇到错误退出时应执行的代码
|
||||
import json
|
||||
@ -559,7 +558,10 @@ class BrowserThread(Thread):
|
||||
self.print_and_log(f"任务执行完毕,将在{quitWaitTime}秒后自动退出浏览器并清理临时用户目录,等待时间可在保存任务对话框中设置。")
|
||||
self.print_and_log(f"The task is completed, the browser will exit automatically and the temporary user directory will be cleaned up after {quitWaitTime} seconds, the waiting time can be set in the save task dialog.")
|
||||
time.sleep(quitWaitTime)
|
||||
self.browser.quit()
|
||||
try:
|
||||
self.browser.quit()
|
||||
except:
|
||||
pass
|
||||
self.print_and_log("正在清理临时用户目录……|Cleaning up temporary user directory...")
|
||||
try:
|
||||
shutil.rmtree(self.option["tmp_user_data_folder"])
|
||||
@ -2253,6 +2255,7 @@ if __name__ == '__main__':
|
||||
"keyboard": True, # 是否监听键盘输入
|
||||
"pause_key": "p", # 暂停键
|
||||
"version": "0.6.2",
|
||||
"docker_driver": "",
|
||||
}
|
||||
c = Config(config)
|
||||
print(c)
|
||||
@ -2442,8 +2445,17 @@ if __name__ == '__main__':
|
||||
except:
|
||||
browser = "chrome"
|
||||
if browser == "chrome":
|
||||
selenium_service = Service(executable_path=driver_path)
|
||||
browser_t = MyChrome(service=selenium_service, options=options)
|
||||
if c.docker_driver == "":
|
||||
print("Using local driver")
|
||||
selenium_service = Service(executable_path=driver_path)
|
||||
browser_t = MyChrome(service=selenium_service, options=options, mode='local_driver')
|
||||
else:
|
||||
print("Using remote driver")
|
||||
# Use docker driver, default address is http://localhost:4444/wd/hub
|
||||
# Headless mode
|
||||
options.add_argument("--headless")
|
||||
print("Headless mode")
|
||||
browser_t = MyChrome(command_executor=c.docker_driver, options=options, mode='remote_driver')
|
||||
elif browser == "edge":
|
||||
from selenium.webdriver.edge.service import Service as EdgeService
|
||||
from selenium.webdriver.edge.options import Options as EdgeOptions
|
||||
@ -2504,6 +2516,7 @@ if __name__ == '__main__':
|
||||
# print("Passing the Cloudflare verification mode is sometimes unstable. If the verification fails, you need to try again every few minutes, or you can change to a new user information folder and then execute the task.")
|
||||
# 使用监听器监听键盘输入
|
||||
try:
|
||||
from pynput.keyboard import Key, Listener
|
||||
if c.keyboard:
|
||||
with Listener(on_press=on_press_creator(press_time, event),
|
||||
on_release=on_release_creator(event, press_time)) as listener:
|
||||
|
Binary file not shown.
Binary file not shown.
2
ElectronJS/stealth.min.js
vendored
2
ElectronJS/stealth.min.js
vendored
File diff suppressed because one or more lines are too long
@ -48,7 +48,7 @@ def copy_folder(source_folder, destination_folder):
|
||||
|
||||
|
||||
def get_chrome_version():
|
||||
version = "124"
|
||||
version = "131"
|
||||
if sys.platform == "win32":
|
||||
version_re = re.compile(r"^[1-9]\d*\.\d*.\d*")
|
||||
try:
|
||||
|
@ -2194,6 +2194,7 @@ if __name__ == '__main__':
|
||||
"pause_key": "p", # 暂停键
|
||||
"version": "0.6.3",
|
||||
"docker_driver": "",
|
||||
"user_folder": "",
|
||||
}
|
||||
c = Config(config)
|
||||
print(c)
|
||||
@ -2289,35 +2290,43 @@ if __name__ == '__main__':
|
||||
os.mkdir(tmp_user_folder_parent)
|
||||
characters = string.ascii_letters + string.digits
|
||||
for i in range(len(c.ids)):
|
||||
id = c.ids[i]
|
||||
# 从字符集中随机选择字符构成字符串
|
||||
random_string = ''.join(random.choice(characters) for i in range(10))
|
||||
tmp_user_data_folder = os.path.join(tmp_user_folder_parent, "user_data_" + str(id) + "_" + str(time.time()).replace(".","") + "_" + random_string)
|
||||
tmp_options[i]["tmp_user_data_folder"] = tmp_user_data_folder
|
||||
if os.path.exists(tmp_user_data_folder):
|
||||
try:
|
||||
shutil.rmtree(tmp_user_data_folder)
|
||||
except:
|
||||
pass
|
||||
print(f"Copying user data folder to: {tmp_user_data_folder}, please wait...")
|
||||
print(f"正在复制用户信息目录到: {tmp_user_data_folder},请稍等...")
|
||||
if os.path.exists(absolute_user_data_folder):
|
||||
try:
|
||||
shutil.copytree(absolute_user_data_folder, tmp_user_data_folder)
|
||||
print("User data folder copied successfully, if you exit the program before it finishes, please delete the temporary user data folder manually.")
|
||||
print("用户信息目录复制成功,如果程序在运行过程中被手动退出,请手动删除临时用户信息目录。")
|
||||
except:
|
||||
tmp_user_data_folder = absolute_user_data_folder
|
||||
print("Copy user data folder failed, use the original folder.")
|
||||
print("复制用户信息目录失败,使用原始目录。")
|
||||
else:
|
||||
tmp_user_data_folder = absolute_user_data_folder
|
||||
print("Cannot find user data folder, create a new folder.")
|
||||
print("未找到用户信息目录,创建新目录。")
|
||||
options = tmp_options[i]["options"]
|
||||
options.add_argument(
|
||||
f'--user-data-dir={tmp_user_data_folder}') # TMALL 反扒
|
||||
options.add_argument("--profile-directory=Default")
|
||||
if c.user_folder == "":
|
||||
id = c.ids[i]
|
||||
# 从字符集中随机选择字符构成字符串
|
||||
random_string = ''.join(random.choice(characters) for i in range(10))
|
||||
tmp_user_data_folder = os.path.join(tmp_user_folder_parent, "user_data_" + str(id) + "_" + str(time.time()).replace(".","") + "_" + random_string)
|
||||
tmp_options[i]["tmp_user_data_folder"] = tmp_user_data_folder
|
||||
if os.path.exists(tmp_user_data_folder):
|
||||
try:
|
||||
shutil.rmtree(tmp_user_data_folder)
|
||||
except:
|
||||
pass
|
||||
print(f"Copying user data folder to: {tmp_user_data_folder}, please wait...")
|
||||
print(f"正在复制用户信息目录到: {tmp_user_data_folder},请稍等...")
|
||||
if os.path.exists(absolute_user_data_folder):
|
||||
try:
|
||||
shutil.copytree(absolute_user_data_folder, tmp_user_data_folder)
|
||||
print("User data folder copied successfully, if you exit the program before it finishes, please delete the temporary user data folder manually.")
|
||||
print("用户信息目录复制成功,如果程序在运行过程中被手动退出,请手动删除临时用户信息目录。")
|
||||
except:
|
||||
tmp_user_data_folder = absolute_user_data_folder
|
||||
print("Copy user data folder failed, use the original folder.")
|
||||
print("复制用户信息目录失败,使用原始目录。")
|
||||
else:
|
||||
tmp_user_data_folder = absolute_user_data_folder
|
||||
print("Cannot find user data folder, create a new folder.")
|
||||
print("未找到用户信息目录,创建新目录。")
|
||||
options.add_argument(
|
||||
f'--user-data-dir={tmp_user_data_folder}') # TMALL 反扒
|
||||
print(f"Use local user data folder: {tmp_user_data_folder}")
|
||||
print(f"使用本地用户信息目录: {tmp_user_data_folder}")
|
||||
else:
|
||||
options.add_argument(
|
||||
f'--user-data-dir={c.user_folder}')
|
||||
print(f"Use specifed user data folder: {c.user_folder}", ", please note if you are using docker, this user folder path should be the path inside the docker container.")
|
||||
print(f"使用指定的用户信息目录: {c.user_folder}", ",请注意如果您正在使用docker,此用户文件夹路径应是容器内的路径。")
|
||||
print(
|
||||
"如果报错Selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally,说明有之前运行的Chrome实例没有正常关闭,请关闭之前打开的所有Chrome实例后再运行程序即可。")
|
||||
print(
|
||||
|
Loading…
x
Reference in New Issue
Block a user