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.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.

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():
version = "124"
version = "131"
if sys.platform == "win32":
version_re = re.compile(r"^[1-9]\d*\.\d*.\d*")
try:

View File

@ -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(