返回提交历史
Modified
g4f/Provider/AItianhuSpace.py
+5
-12
Modified
g4f/Provider/MyShell.py
+4
-12
Modified
g4f/Provider/PerplexityAi.py
+4
-12
Modified
g4f/Provider/Phind.py
+4
-12
Modified
g4f/Provider/helper.py
+3
-19
Modified
g4f/Provider/needs_auth/Bard.py
+5
-15
Modified
g4f/Provider/needs_auth/Poe.py
+7
-15
XFEstudio/gpt4free
Remove virtualdisplay and add headless mode
2ebbcdf0
代码差异
7 个文件
+32
-97
@@ -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()
@@ -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()
@@ -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()
@@ -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()
@@ -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)
@@ -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()
@@ -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()