XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Remove virtualdisplay and add headless mode

2ebbcdf0
Heiner Lohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

7 个文件 +32 -97
Modified g4f/Provider/AItianhuSpace.py +5 -12
@@ -24,7 +24,7 @@ class AItianhuSpace(BaseProvider):
24 24 proxy: str = None,
25 25 timeout: int = 120,
26 26 browser: WebDriver = None,
27 hidden_display: bool = True,
27 headless: bool = True,
28 28 **kwargs
29 29 ) -> CreateResult:
30 30 if not model:
@@ -38,13 +38,7 @@ class AItianhuSpace(BaseProvider):
38 38 print(f"AItianhuSpace | using domain: {domain}")
39 39 url = f"https://{domain}"
40 40 prompt = format_prompt(messages)
41 if browser:
42 driver = browser
43 else:
44 if hidden_display:
45 driver, display = get_browser("", True, proxy)
46 else:
47 driver = get_browser("", False, proxy)
41 driver = browser if browser else get_browser("", headless, proxy)
48 42
49 43 from selenium.webdriver.common.by import By
50 44 from selenium.webdriver.support.ui import WebDriverWait
@@ -66,6 +60,7 @@ document.getElementById('sheet').addEventListener('click', () => {{
66 60 original_window = driver.current_window_handle
67 61 for window_handle in driver.window_handles:
68 62 if window_handle != original_window:
63 driver.close()
69 64 driver.switch_to.window(window_handle)
70 65 break
71 66
@@ -120,9 +115,7 @@ return "";
120 115 else:
121 116 time.sleep(0.1)
122 117 finally:
123 driver.close()
124 118 if not browser:
119 driver.close()
125 120 time.sleep(0.1)
126 driver.quit()
127 if hidden_display:
128 display.stop()
121 driver.quit()
Modified g4f/Provider/MyShell.py +4 -12
@@ -21,16 +21,10 @@ class MyShell(BaseProvider):
21 21 proxy: str = None,
22 22 timeout: int = 120,
23 23 browser: WebDriver = None,
24 hidden_display: bool = True,
24 headless: bool = True,
25 25 **kwargs
26 26 ) -> CreateResult:
27 if browser:
28 driver = browser
29 else:
30 if hidden_display:
31 driver, display = get_browser("", True, proxy)
32 else:
33 driver = get_browser("", False, proxy)
27 driver = browser if browser else get_browser("", headless, proxy)
34 28
35 29 from selenium.webdriver.common.by import By
36 30 from selenium.webdriver.support.ui import WebDriverWait
@@ -87,9 +81,7 @@ return content;
87 81 elif chunk != "":
88 82 break
89 83 finally:
90 driver.close()
91 84 if not browser:
85 driver.close()
92 86 time.sleep(0.1)
93 driver.quit()
94 if hidden_display:
95 display.stop()
87 driver.quit()
Modified g4f/Provider/PerplexityAi.py +4 -12
@@ -22,16 +22,10 @@ class PerplexityAi(BaseProvider):
22 22 timeout: int = 120,
23 23 browser: WebDriver = None,
24 24 copilot: bool = False,
25 hidden_display: bool = True,
25 headless: bool = True,
26 26 **kwargs
27 27 ) -> CreateResult:
28 if browser:
29 driver = browser
30 else:
31 if hidden_display:
32 driver, display = get_browser("", True, proxy)
33 else:
34 driver = get_browser("", False, proxy)
28 driver = browser if browser else get_browser("", headless, proxy)
35 29
36 30 from selenium.webdriver.common.by import By
37 31 from selenium.webdriver.support.ui import WebDriverWait
@@ -112,9 +106,7 @@ if(window._message && window._message != window._last_message) {
112 106 else:
113 107 time.sleep(0.1)
114 108 finally:
115 driver.close()
116 109 if not browser:
110 driver.close()
117 111 time.sleep(0.1)
118 driver.quit()
119 if hidden_display:
120 display.stop()
112 driver.quit()
Modified g4f/Provider/Phind.py +4 -12
@@ -23,16 +23,10 @@ class Phind(BaseProvider):
23 23 timeout: int = 120,
24 24 browser: WebDriver = None,
25 25 creative_mode: bool = None,
26 hidden_display: bool = True,
26 headless: bool = True,
27 27 **kwargs
28 28 ) -> CreateResult:
29 if browser:
30 driver = browser
31 else:
32 if hidden_display:
33 driver, display = get_browser("", True, proxy)
34 else:
35 driver = get_browser("", False, proxy)
29 driver = browser if browser else get_browser("", headless, proxy)
36 30
37 31 from selenium.webdriver.common.by import By
38 32 from selenium.webdriver.support.ui import WebDriverWait
@@ -111,9 +105,7 @@ if(window.reader) {
111 105 else:
112 106 time.sleep(0.1)
113 107 finally:
114 driver.close()
115 108 if not browser:
109 driver.close()
116 110 time.sleep(0.1)
117 driver.quit()
118 if hidden_display:
119 display.stop()
111 driver.quit()
Modified g4f/Provider/helper.py +3 -19
@@ -31,14 +31,6 @@ except ImportError:
31 31 class ChromeOptions():
32 32 def add_argument():
33 33 pass
34 try:
35 from pyvirtualdisplay import Display
36 except ImportError:
37 class Display():
38 def start():
39 pass
40 def stop():
41 pass
42 34
43 35 from ..typing import Dict, Messages, Union, Tuple
44 36 from .. import debug
@@ -139,24 +131,16 @@ def format_prompt(messages: Messages, add_special_tokens=False) -> str:
139 131
140 132 def get_browser(
141 133 user_data_dir: str = None,
142 hidden_display: bool = False,
134 headless: bool = False,
143 135 proxy: str = None,
144 136 options: ChromeOptions = None
145 ) -> Union[Chrome, Tuple[Chrome, Display]] :
137 ) -> Chrome:
146 138 if user_data_dir == None:
147 139 user_data_dir = user_config_dir("g4f")
148 140
149 if hidden_display:
150 display = Display(visible=0, size=(1920, 1080))
151 display.start()
152
153 141 if proxy:
154 142 if not options:
155 143 options = ChromeOptions()
156 144 options.add_argument(f'--proxy-server={proxy}')
157 145
158 browser = Chrome(user_data_dir=user_data_dir, options=options)
159 if hidden_display:
160 return browser, display
161
162 return browser
146 return Chrome(user_data_dir=user_data_dir, options=options, headless=headless)
Modified g4f/Provider/needs_auth/Bard.py +5 -15
@@ -19,17 +19,12 @@ class Bard(BaseProvider):
19 19 stream: bool,
20 20 proxy: str = None,
21 21 browser: WebDriver = None,
22 hidden_display: bool = True,
22 user_data_dir: str = None,
23 headless: bool = True,
23 24 **kwargs
24 25 ) -> CreateResult:
25 26 prompt = format_prompt(messages)
26 if browser:
27 driver = browser
28 else:
29 if hidden_display:
30 driver, display = get_browser(None, True, proxy)
31 else:
32 driver = get_browser(None, False, proxy)
27 driver = browser if browser else get_browser(user_data_dir, headless, proxy)
33 28
34 29 from selenium.webdriver.common.by import By
35 30 from selenium.webdriver.support.ui import WebDriverWait
@@ -43,9 +38,6 @@ class Bard(BaseProvider):
43 38 # Reopen browser for login
44 39 if not browser:
45 40 driver.quit()
46 # New browser should be visible
47 if hidden_display:
48 display.stop()
49 41 driver = get_browser(None, False, proxy)
50 42 driver.get(f"{cls.url}/chat")
51 43 wait = WebDriverWait(driver, 240)
@@ -83,9 +75,7 @@ XMLHttpRequest.prototype.open = function(method, url) {
83 75 else:
84 76 time.sleep(0.1)
85 77 finally:
86 driver.close()
87 78 if not browser:
79 driver.close()
88 80 time.sleep(0.1)
89 driver.quit()
90 if hidden_display:
91 display.stop()
81 driver.quit()
Modified g4f/Provider/needs_auth/Poe.py +7 -15
@@ -22,6 +22,7 @@ models = {
22 22 class Poe(BaseProvider):
23 23 url = "https://poe.com"
24 24 working = True
25 needs_auth = True
25 26 supports_gpt_35_turbo = True
26 27 supports_stream = True
27 28
@@ -33,7 +34,8 @@ class Poe(BaseProvider):
33 34 stream: bool,
34 35 proxy: str = None,
35 36 browser: WebDriver = None,
36 hidden_display: bool = True,
37 user_data_dir: str = None,
38 headless: bool = True,
37 39 **kwargs
38 40 ) -> CreateResult:
39 41 if not model:
@@ -41,13 +43,7 @@ class Poe(BaseProvider):
41 43 elif model not in models:
42 44 raise ValueError(f"Model are not supported: {model}")
43 45 prompt = format_prompt(messages)
44 if browser:
45 driver = browser
46 else:
47 if hidden_display:
48 driver, display = get_browser(None, True, proxy)
49 else:
50 driver = get_browser(None, False, proxy)
46 driver = browser if browser else get_browser(user_data_dir, headless, proxy)
51 47
52 48 script = """
53 49 window._message = window._last_message = "";
@@ -80,14 +76,12 @@ window.WebSocket = ProxiedWebSocket;
80 76
81 77 try:
82 78 driver.get(f"{cls.url}/{models[model]['name']}")
83 wait = WebDriverWait(driver, 10 if hidden_display else 240)
79 wait = WebDriverWait(driver, 10 if headless else 240)
84 80 wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "textarea[class^='GrowingTextArea']")))
85 81 except:
86 82 # Reopen browser for login
87 83 if not browser:
88 84 driver.quit()
89 if hidden_display:
90 display.stop()
91 85 driver = get_browser(None, False, proxy)
92 86 driver.get(f"{cls.url}/{models[model]['name']}")
93 87 wait = WebDriverWait(driver, 240)
@@ -121,9 +115,7 @@ if(window._message && window._message != window._last_message) {
121 115 else:
122 116 time.sleep(0.1)
123 117 finally:
124 driver.close()
125 118 if not browser:
119 driver.close()
126 120 time.sleep(0.1)
127 driver.quit()
128 if hidden_display:
129 display.stop()
121 driver.quit()