Specified User Folder

This commit is contained in:
Naibo Wang 2024-12-31 01:31:40 +08:00
parent f7a842eed6
commit d7ccb22d01
6 changed files with 55 additions and 33 deletions

View File

@ -31,7 +31,6 @@ from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.service import Service
from pynput.keyboard import Key, Listener
from datetime import datetime from datetime import datetime
import io # 遇到错误退出时应执行的代码 import io # 遇到错误退出时应执行的代码
import json import json
@ -559,7 +558,10 @@ class BrowserThread(Thread):
self.print_and_log(f"任务执行完毕,将在{quitWaitTime}秒后自动退出浏览器并清理临时用户目录,等待时间可在保存任务对话框中设置。") 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.") 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) time.sleep(quitWaitTime)
self.browser.quit() try:
self.browser.quit()
except:
pass
self.print_and_log("正在清理临时用户目录……|Cleaning up temporary user directory...") self.print_and_log("正在清理临时用户目录……|Cleaning up temporary user directory...")
try: try:
shutil.rmtree(self.option["tmp_user_data_folder"]) shutil.rmtree(self.option["tmp_user_data_folder"])
@ -2253,6 +2255,7 @@ if __name__ == '__main__':
"keyboard": True, # 是否监听键盘输入 "keyboard": True, # 是否监听键盘输入
"pause_key": "p", # 暂停键 "pause_key": "p", # 暂停键
"version": "0.6.2", "version": "0.6.2",
"docker_driver": "",
} }
c = Config(config) c = Config(config)
print(c) print(c)
@ -2442,8 +2445,17 @@ if __name__ == '__main__':
except: except:
browser = "chrome" browser = "chrome"
if browser == "chrome": if browser == "chrome":
selenium_service = Service(executable_path=driver_path) if c.docker_driver == "":
browser_t = MyChrome(service=selenium_service, options=options) 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": elif browser == "edge":
from selenium.webdriver.edge.service import Service as EdgeService from selenium.webdriver.edge.service import Service as EdgeService
from selenium.webdriver.edge.options import Options as EdgeOptions 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.") # 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: try:
from pynput.keyboard import Key, Listener
if c.keyboard: if c.keyboard:
with Listener(on_press=on_press_creator(press_time, event), with Listener(on_press=on_press_creator(press_time, event),
on_release=on_release_creator(event, press_time)) as listener: on_release=on_release_creator(event, press_time)) as listener:

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -48,7 +48,7 @@ def copy_folder(source_folder, destination_folder):
def get_chrome_version(): def get_chrome_version():
version = "124" version = "131"
if sys.platform == "win32": if sys.platform == "win32":
version_re = re.compile(r"^[1-9]\d*\.\d*.\d*") version_re = re.compile(r"^[1-9]\d*\.\d*.\d*")
try: try:

View File

@ -2194,6 +2194,7 @@ if __name__ == '__main__':
"pause_key": "p", # 暂停键 "pause_key": "p", # 暂停键
"version": "0.6.3", "version": "0.6.3",
"docker_driver": "", "docker_driver": "",
"user_folder": "",
} }
c = Config(config) c = Config(config)
print(c) print(c)
@ -2289,35 +2290,43 @@ if __name__ == '__main__':
os.mkdir(tmp_user_folder_parent) os.mkdir(tmp_user_folder_parent)
characters = string.ascii_letters + string.digits characters = string.ascii_letters + string.digits
for i in range(len(c.ids)): 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 = tmp_options[i]["options"]
options.add_argument(
f'--user-data-dir={tmp_user_data_folder}') # TMALL 反扒
options.add_argument("--profile-directory=Default") 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( print(
"如果报错Selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally说明有之前运行的Chrome实例没有正常关闭请关闭之前打开的所有Chrome实例后再运行程序即可。") "如果报错Selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally说明有之前运行的Chrome实例没有正常关闭请关闭之前打开的所有Chrome实例后再运行程序即可。")
print( print(