Browse Source

Specified User Folder

Naibo Wang 9 months ago
parent
commit
d7ccb22d01

+ 17 - 4
.temp_to_pub/EasySpider_Linux_x64/Code/easyspider_executestage.py

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

BIN
ElectronJS/EasySpider_en.crx


BIN
ElectronJS/EasySpider_zh.crx


File diff suppressed because it is too large
+ 1 - 1
ElectronJS/stealth.min.js


+ 1 - 1
ElectronJS/update_chrome.py

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

+ 36 - 27
ExecuteStage/easyspider_executestage.py

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

Some files were not shown because too many files changed in this diff