Skip to content

Commit d7ccb22

Browse files
committed
Specified User Folder
1 parent f7a842e commit d7ccb22

File tree

6 files changed

+55
-33
lines changed

6 files changed

+55
-33
lines changed

.temp_to_pub/EasySpider_Linux_x64/Code/easyspider_executestage.py

+17-4
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
from selenium.webdriver.common.keys import Keys
3232
from selenium.webdriver.chrome.options import Options
3333
from selenium.webdriver.chrome.service import Service
34-
from pynput.keyboard import Key, Listener
3534
from datetime import datetime
3635
import io # 遇到错误退出时应执行的代码
3736
import json
@@ -559,7 +558,10 @@ def run(self):
559558
self.print_and_log(f"任务执行完毕,将在{quitWaitTime}秒后自动退出浏览器并清理临时用户目录,等待时间可在保存任务对话框中设置。")
560559
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.")
561560
time.sleep(quitWaitTime)
562-
self.browser.quit()
561+
try:
562+
self.browser.quit()
563+
except:
564+
pass
563565
self.print_and_log("正在清理临时用户目录……|Cleaning up temporary user directory...")
564566
try:
565567
shutil.rmtree(self.option["tmp_user_data_folder"])
@@ -2253,6 +2255,7 @@ def getData(self, param, loopElement, isInLoop=True, parentPath="", index=0):
22532255
"keyboard": True, # 是否监听键盘输入
22542256
"pause_key": "p", # 暂停键
22552257
"version": "0.6.2",
2258+
"docker_driver": "",
22562259
}
22572260
c = Config(config)
22582261
print(c)
@@ -2442,8 +2445,17 @@ def getData(self, param, loopElement, isInLoop=True, parentPath="", index=0):
24422445
except:
24432446
browser = "chrome"
24442447
if browser == "chrome":
2445-
selenium_service = Service(executable_path=driver_path)
2446-
browser_t = MyChrome(service=selenium_service, options=options)
2448+
if c.docker_driver == "":
2449+
print("Using local driver")
2450+
selenium_service = Service(executable_path=driver_path)
2451+
browser_t = MyChrome(service=selenium_service, options=options, mode='local_driver')
2452+
else:
2453+
print("Using remote driver")
2454+
# Use docker driver, default address is http://localhost:4444/wd/hub
2455+
# Headless mode
2456+
options.add_argument("--headless")
2457+
print("Headless mode")
2458+
browser_t = MyChrome(command_executor=c.docker_driver, options=options, mode='remote_driver')
24472459
elif browser == "edge":
24482460
from selenium.webdriver.edge.service import Service as EdgeService
24492461
from selenium.webdriver.edge.options import Options as EdgeOptions
@@ -2504,6 +2516,7 @@ def getData(self, param, loopElement, isInLoop=True, parentPath="", index=0):
25042516
# 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.")
25052517
# 使用监听器监听键盘输入
25062518
try:
2519+
from pynput.keyboard import Key, Listener
25072520
if c.keyboard:
25082521
with Listener(on_press=on_press_creator(press_time, event),
25092522
on_release=on_release_creator(event, press_time)) as listener:

ElectronJS/EasySpider_en.crx

-318 Bytes
Binary file not shown.

ElectronJS/EasySpider_zh.crx

-319 Bytes
Binary file not shown.

ElectronJS/stealth.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ElectronJS/update_chrome.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def copy_folder(source_folder, destination_folder):
4848

4949

5050
def get_chrome_version():
51-
version = "124"
51+
version = "131"
5252
if sys.platform == "win32":
5353
version_re = re.compile(r"^[1-9]\d*\.\d*.\d*")
5454
try:

ExecuteStage/easyspider_executestage.py

+36-27
Original file line numberDiff line numberDiff line change
@@ -2194,6 +2194,7 @@ def getData(self, param, loopElement, isInLoop=True, parentPath="", index=0):
21942194
"pause_key": "p", # 暂停键
21952195
"version": "0.6.3",
21962196
"docker_driver": "",
2197+
"user_folder": "",
21972198
}
21982199
c = Config(config)
21992200
print(c)
@@ -2289,35 +2290,43 @@ def getData(self, param, loopElement, isInLoop=True, parentPath="", index=0):
22892290
os.mkdir(tmp_user_folder_parent)
22902291
characters = string.ascii_letters + string.digits
22912292
for i in range(len(c.ids)):
2292-
id = c.ids[i]
2293-
# 从字符集中随机选择字符构成字符串
2294-
random_string = ''.join(random.choice(characters) for i in range(10))
2295-
tmp_user_data_folder = os.path.join(tmp_user_folder_parent, "user_data_" + str(id) + "_" + str(time.time()).replace(".","") + "_" + random_string)
2296-
tmp_options[i]["tmp_user_data_folder"] = tmp_user_data_folder
2297-
if os.path.exists(tmp_user_data_folder):
2298-
try:
2299-
shutil.rmtree(tmp_user_data_folder)
2300-
except:
2301-
pass
2302-
print(f"Copying user data folder to: {tmp_user_data_folder}, please wait...")
2303-
print(f"正在复制用户信息目录到: {tmp_user_data_folder},请稍等...")
2304-
if os.path.exists(absolute_user_data_folder):
2305-
try:
2306-
shutil.copytree(absolute_user_data_folder, tmp_user_data_folder)
2307-
print("User data folder copied successfully, if you exit the program before it finishes, please delete the temporary user data folder manually.")
2308-
print("用户信息目录复制成功,如果程序在运行过程中被手动退出,请手动删除临时用户信息目录。")
2309-
except:
2310-
tmp_user_data_folder = absolute_user_data_folder
2311-
print("Copy user data folder failed, use the original folder.")
2312-
print("复制用户信息目录失败,使用原始目录。")
2313-
else:
2314-
tmp_user_data_folder = absolute_user_data_folder
2315-
print("Cannot find user data folder, create a new folder.")
2316-
print("未找到用户信息目录,创建新目录。")
23172293
options = tmp_options[i]["options"]
2318-
options.add_argument(
2319-
f'--user-data-dir={tmp_user_data_folder}') # TMALL 反扒
23202294
options.add_argument("--profile-directory=Default")
2295+
if c.user_folder == "":
2296+
id = c.ids[i]
2297+
# 从字符集中随机选择字符构成字符串
2298+
random_string = ''.join(random.choice(characters) for i in range(10))
2299+
tmp_user_data_folder = os.path.join(tmp_user_folder_parent, "user_data_" + str(id) + "_" + str(time.time()).replace(".","") + "_" + random_string)
2300+
tmp_options[i]["tmp_user_data_folder"] = tmp_user_data_folder
2301+
if os.path.exists(tmp_user_data_folder):
2302+
try:
2303+
shutil.rmtree(tmp_user_data_folder)
2304+
except:
2305+
pass
2306+
print(f"Copying user data folder to: {tmp_user_data_folder}, please wait...")
2307+
print(f"正在复制用户信息目录到: {tmp_user_data_folder},请稍等...")
2308+
if os.path.exists(absolute_user_data_folder):
2309+
try:
2310+
shutil.copytree(absolute_user_data_folder, tmp_user_data_folder)
2311+
print("User data folder copied successfully, if you exit the program before it finishes, please delete the temporary user data folder manually.")
2312+
print("用户信息目录复制成功,如果程序在运行过程中被手动退出,请手动删除临时用户信息目录。")
2313+
except:
2314+
tmp_user_data_folder = absolute_user_data_folder
2315+
print("Copy user data folder failed, use the original folder.")
2316+
print("复制用户信息目录失败,使用原始目录。")
2317+
else:
2318+
tmp_user_data_folder = absolute_user_data_folder
2319+
print("Cannot find user data folder, create a new folder.")
2320+
print("未找到用户信息目录,创建新目录。")
2321+
options.add_argument(
2322+
f'--user-data-dir={tmp_user_data_folder}') # TMALL 反扒
2323+
print(f"Use local user data folder: {tmp_user_data_folder}")
2324+
print(f"使用本地用户信息目录: {tmp_user_data_folder}")
2325+
else:
2326+
options.add_argument(
2327+
f'--user-data-dir={c.user_folder}')
2328+
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.")
2329+
print(f"使用指定的用户信息目录: {c.user_folder}", ",请注意如果您正在使用docker,此用户文件夹路径应是容器内的路径。")
23212330
print(
23222331
"如果报错Selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally,说明有之前运行的Chrome实例没有正常关闭,请关闭之前打开的所有Chrome实例后再运行程序即可。")
23232332
print(

0 commit comments

Comments
 (0)