Skip to content

Commit bbed7ec

Browse files
committed
update
1 parent 9b7d1a3 commit bbed7ec

File tree

7 files changed

+294
-50
lines changed

7 files changed

+294
-50
lines changed

bard.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,27 +59,36 @@ func Bard() {
5959
for {
6060
select {
6161
case question := <-channel_bard:
62-
//page_bard.MustActivate()
62+
page_bard.MustActivate()
6363
//page_bard.MustElementX("//rich-textarea[@aria-label='Input for prompt text']").MustWaitVisible().MustInput(question)
6464
page_bard.MustElementX("//rich-textarea[@enterkeyhint='send']").MustWaitVisible().MustInput(question)
6565
page_bard.MustElementX("//button[@mattooltip='Submit']").MustClick()
66-
fmt.Println("Bard generating...")
66+
fmt.Println("Bard generating...", role)
6767
//page_bard.MustActivate()
68-
//if role == ".all" {
69-
// channel_bard <- "click_bard"
70-
//}
68+
if role == ".all" {
69+
//fmt.Println("Bard role", role)
70+
channel_bard <- "click_bard"
71+
}
7172
// wait generated icon
7273
var generated_icon_appear = false
74+
var c = 0
7375
for i := 1; i <= 60; i++ {
7476
if page_bard.MustHasX("//img[contains(@src, 'https://www.gstatic.com/lamda/images/sparkle_resting_v2_1ff6f6a71f2d298b1a31.gif')]") {
7577
generated_icon_appear = true
7678
break
7779
}
80+
c = c + 1
81+
if c == 5 {
82+
page_bard.MustActivate()
83+
c = 0
84+
}
7885
time.Sleep(1 * time.Second)
7986
}
8087
if generated_icon_appear == true {
8188
img := page_bard.MustElementX("//img[contains(@src, 'https://www.gstatic.com/lamda/images/sparkle_resting_v2_1ff6f6a71f2d298b1a31.gif')][last()]").MustWaitVisible()
82-
response := img.MustElementX("parent::div/parent::bard-logo/parent::div/parent::div").MustWaitVisible()
89+
//response := img.MustElementX("parent::div/parent::bard-logo/parent::div/parent::div").MustWaitVisible()
90+
//response := img.MustElementX("parent::div/parent::div/parent::bard-avatar/parent::div/parent::div").MustWaitVisible()
91+
response := img.MustElementX("ancestor::bard-avatar[1]/parent::div/parent::div").MustWaitVisible()
8392
answer := response.MustText()
8493
channel_bard <- answer
8594
} else {

chatgpt.go

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func Chatgpt() {
7979
for {
8080
select {
8181
case question := <-channel_chatgpt:
82-
//page_chatgpt.MustActivate()
82+
page_chatgpt.MustActivate()
8383
for i := 1; i <= 20; i++ {
8484
if page_chatgpt.MustHasX("//textarea[@id='prompt-textarea']") {
8585
page_chatgpt.MustElementX("//textarea[@id='prompt-textarea']").MustInput(question)
@@ -94,31 +94,49 @@ func Chatgpt() {
9494
}
9595
time.Sleep(1 * time.Second)
9696
}
97-
fmt.Println("ChatGPT generating...")
97+
fmt.Println("ChatGPT generating...", role)
9898
//page_chatgpt.MustActivate()
99-
//if role == ".all" {
100-
// channel_chatgpt <- "click_chatgpt"
101-
//}
99+
if role == ".all" {
100+
channel_chatgpt <- "click_chatgpt"
101+
}
102102

103103

104104
//page_chatgpt.MustElementX("//div[contains(text(), 'Stop generating')]")
105-
page_chatgpt.MustElement("svg path[d='M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2z']")
105+
//page_chatgpt.MustElement("svg path[d='M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2z']")
106106
//fmt.Println("found creating icon")
107107
var regenerate_icon = false
108108

109109
for i := 1; i <= 60; i++ {
110110
//if page_chatgpt.MustHas("svg path[d='M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15']") {
111+
if page_chatgpt.MustHas("svg path[d='M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2z']") {
112+
113+
time.Sleep(1 * time.Second)
114+
continue
115+
}
116+
117+
if page_chatgpt.MustHas("svg path[d='M4.5 2.5C5.05228 2.5 5.5 2.94772 5.5 3.5V5.07196C7.19872 3.47759 9.48483 2.5 12 2.5C17.2467 2.5 21.5 6.75329 21.5 12C21.5 17.2467 17.2467 21.5 12 21.5C7.1307 21.5 3.11828 17.8375 2.565 13.1164C2.50071 12.5679 2.89327 12.0711 3.4418 12.0068C3.99033 11.9425 4.48712 12.3351 4.5514 12.8836C4.98798 16.6089 8.15708 19.5 12 19.5C16.1421 19.5 19.5 16.1421 19.5 12C19.5 7.85786 16.1421 4.5 12 4.5C9.7796 4.5 7.7836 5.46469 6.40954 7H9C9.55228 7 10 7.44772 10 8C10 8.55228 9.55228 9 9 9H4.5C3.96064 9 3.52101 8.57299 3.50073 8.03859C3.49983 8.01771 3.49958 7.99677 3.5 7.9758V3.5C3.5 2.94772 3.94771 2.5 4.5 2.5Z']") {
118+
//page_chatgpt.MustElement("svg path[d='M7 11L12 6L17 11M12 18V7']").MustWaitVisible().MustWaitStable()
111119
if page_chatgpt.MustHas("svg path[d='M7 11L12 6L17 11M12 18V7']") {
112120
regenerate_icon = true
113121
//fmt.Println("wait...")
114122
break
123+
}
115124
}
116125
time.Sleep(1 * time.Second)
117126
}
118127
if regenerate_icon == true {
119-
answer := page_chatgpt.MustElementX("(//div[contains(@class, 'w-full text-token-text-primary')])[last()]").MustText()[7:]
128+
page_chatgpt.MustActivate()
129+
time.Sleep(3 * time.Second)
130+
131+
answer := page_chatgpt.MustElementX("(//div[contains(@class, 'w-full text-token-text-primary')])[last()]").MustText()[15:]
120132
//answer := page_chatgpt.MustElementX("(//div[contains(@class, 'group w-full')])[last()]").MustText()[7:]
121133
//answer := page_chatgpt.MustElementX("(//div[contains(@class, 'group final-completion w-full')])[last()]").MustText()[7:]
134+
//answer_div := page_chatgpt.MustElementX("(//div[contains(@class, 'w-full text-token-text-primary')])[last()]").MustWaitStable()
135+
//answer := answer_div.MustText()[15:]
136+
137+
//response := img.MustElementX("ancestor::bard-avatar[1]/parent::div/parent::div").MustWaitVisible()
138+
//answer := response.MustText()
139+
122140
if strings.Contains(answer,
123141
"An error occurred. Either the engine you requested does not exist or there was another issue processing your request. If this issue persists please contact us through our help center at help.openai.com.") {
124142
relogin_chatgpt = true

claude.go

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
_ "embed"
55
"fmt"
66
"github.com/go-rod/rod"
7-
"github.com/go-rod/stealth"
7+
//"github.com/go-rod/stealth"
88
"github.com/google/uuid"
99
"github.com/tidwall/gjson"
1010
"strconv"
@@ -23,9 +23,21 @@ func Claude2() {
2323
relogin_claude = true
2424
}
2525
}()
26-
//page_claude = browser.MustPage("https://claude.ai")
27-
page_claude = stealth.MustPage(browser)
28-
page_claude.MustNavigate("https://claude.ai/api/organizations").MustWaitLoad()
26+
page_claude = browser.MustPage("https://claude.ai")
27+
//page_claude = stealth.MustPage(browser)
28+
//page_claude.MustNavigate("https://claude.ai/chats").MustWaitLoad()
29+
for i := 1; i <= 30; i++ {
30+
if page_claude.MustHasX("//div[contains(text(), 'Start a new chat')]") {
31+
time.Sleep(3 * time.Second)
32+
page_claude.MustElementX("//div[contains(text(), 'Start a new chat')]").MustClick()
33+
relogin_claude = false
34+
break
35+
}
36+
time.Sleep(time.Second)
37+
}
38+
39+
40+
2941
org_json := page_claude.MustElementX("//pre").MustText()
3042
org_uuid := gjson.Get(string(org_json), "0.uuid").String()
3143
time.Sleep(6 * time.Second)
@@ -92,15 +104,36 @@ func Claude2() {
92104
record_chat_messages = gjson.Get(string(record_json), "chat_messages").String()
93105
record_count := gjson.Get(string(response_chat_messages), "#").Int()
94106
page_claude.MustNavigate("https://claude.ai/api/organizations/" + org_uuid).MustWaitLoad()
95-
time.Sleep(2 * time.Second) // delay to simulate human being
107+
time.Sleep(3 * time.Second) // delay to simulate human being
96108
//question = strings.Replace(question, `"`, `\"`, -1) // escape " in input text when code into json
97109

98-
d := `{"completion":{"prompt":"` + question + `","timezone":"Asia/Shanghai","model":"claude-2"},"organization_uuid":"` + org_uuid + `","conversation_uuid":"` + new_uuid + `","text":"` + question + `","attachments":[]}`
110+
//d := `{"completion":{"prompt":"` + question + `","timezone":"Asia/Shanghai","model":"claude-2"},"organization_uuid":"` + org_uuid + `","conversation_uuid":"` + new_uuid + `","text":"` + question + `","attachments":[]}`
111+
d := `{"prompt":"` + question + `","timezone":"Asia/Bangkok","model":"claude-2.1","attachments":[],"files":[]}`
99112
//fmt.Println(d)
113+
//js := `
114+
// (sdata, new_uuid) => {
115+
// var xhr = new XMLHttpRequest();
116+
// xhr.open("POST", "https://claude.ai/api/append_message");
117+
// xhr.setRequestHeader('Content-Type', 'application/json');
118+
// xhr.setRequestHeader('Referer', 'https://claude.ai/chat/new_uuid');
119+
// xhr.setRequestHeader('Origin', 'https://claude.ai');
120+
// xhr.setRequestHeader('TE', 'trailers');
121+
// xhr.setRequestHeader('Connection', 'keep-alive');
122+
// xhr.setRequestHeader('Accept', 'text/event-stream, text/event-stream');
123+
// xhr.onreadystatechange = function() {
124+
// if (xhr.readyState == XMLHttpRequest.DONE) {
125+
// var res_text = xhr.responseText;
126+
// console.log(res_text);
127+
// }
128+
// }
129+
// console.log(sdata);
130+
// xhr.send(sdata);
131+
// }
132+
// `
100133
js := `
101-
(sdata, new_uuid) => {
134+
(sdata, org_uuid, new_uuid) => {
102135
var xhr = new XMLHttpRequest();
103-
xhr.open("POST", "https://claude.ai/api/append_message");
136+
xhr.open("POST", "https://claude.ai/api/organizations/org_uuid/chat_conversations/new_uuid/completion");
104137
xhr.setRequestHeader('Content-Type', 'application/json');
105138
xhr.setRequestHeader('Referer', 'https://claude.ai/chat/new_uuid');
106139
xhr.setRequestHeader('Origin', 'https://claude.ai');
@@ -117,11 +150,11 @@ func Claude2() {
117150
xhr.send(sdata);
118151
}
119152
`
120-
page_claude.MustEval(js, d, new_uuid).Str()
121-
fmt.Println("Claude generating...")
122-
//if role == ".all" {
123-
// channel_claude <- "click_claude"
124-
//}
153+
page_claude.MustEval(js, d, org_uuid, new_uuid).Str()
154+
fmt.Println("Claude generating...", role)
155+
if role == ".all" {
156+
channel_claude <- "click_claude"
157+
}
125158
time.Sleep(3 * time.Second) // delay to simulate human being
126159

127160
// wait answer

claude.goo

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
package main
2+
3+
import (
4+
_ "embed"
5+
"fmt"
6+
"github.com/go-rod/rod"
7+
"github.com/go-rod/stealth"
8+
"github.com/google/uuid"
9+
"github.com/tidwall/gjson"
10+
"strconv"
11+
"strings"
12+
"time"
13+
)
14+
15+
var page_claude *rod.Page
16+
var relogin_claude = true
17+
var channel_claude chan string
18+
19+
func Claude2() {
20+
channel_claude = make(chan string)
21+
defer func() {
22+
if err := recover(); err != nil {
23+
relogin_claude = true
24+
}
25+
}()
26+
//page_claude = browser.MustPage("https://claude.ai")
27+
page_claude = stealth.MustPage(browser)
28+
page_claude.MustNavigate("https://claude.ai/api/organizations").MustWaitLoad()
29+
org_json := page_claude.MustElementX("//pre").MustText()
30+
org_uuid := gjson.Get(string(org_json), "0.uuid").String()
31+
time.Sleep(6 * time.Second)
32+
33+
new_uuid := uuid.New().String()
34+
new_uuid_url := "https://claude.ai/api/organizations/" + org_uuid + "/chat_conversations"
35+
create_new_converastion_json := `{"uuid":"` + new_uuid + `","name":""}`
36+
create_new_converastion_js := `
37+
(new_uuid_url, sdata) => {
38+
var xhr = new XMLHttpRequest();
39+
xhr.open("POST", new_uuid_url);
40+
xhr.setRequestHeader('Content-Type', 'application/json');
41+
xhr.setRequestHeader('Referer', 'https://claude.ai/chats');
42+
xhr.setRequestHeader('Origin', 'https://claude.ai');
43+
xhr.setRequestHeader('TE', 'trailers');
44+
xhr.setRequestHeader('DNT', '1');
45+
xhr.setRequestHeader('Connection', 'keep-alive');
46+
xhr.setRequestHeader('Accept', 'text/event-stream, text/event-stream');
47+
xhr.onreadystatechange = function() {
48+
if (xhr.readyState == XMLHttpRequest.DONE) {
49+
var res_text = xhr.responseText;
50+
console.log(res_text);
51+
}
52+
}
53+
console.log(sdata);
54+
xhr.send(sdata);
55+
}
56+
`
57+
page_claude.MustEval(create_new_converastion_js, new_uuid_url, create_new_converastion_json).Str()
58+
// posted new conversation uuid
59+
time.Sleep(3 * time.Second) // delay to simulate human being
60+
61+
var record_chat_messages string
62+
var response_chat_messages string
63+
for i := 1; i <= 20; i++ {
64+
create_json := page_claude.MustNavigate("https://claude.ai/api/organizations/" + org_uuid + "/chat_conversations/" + new_uuid).MustElementX("//pre").MustText()
65+
66+
message_uuid := gjson.Get(string(create_json), "uuid").String()
67+
if message_uuid == new_uuid {
68+
//fmt.Println("create_conversation success...")
69+
relogin_claude = false
70+
record_chat_messages = gjson.Get(string(create_json), "chat_messages").String()
71+
break
72+
}
73+
time.Sleep(2 * time.Second)
74+
}
75+
76+
if relogin_claude == true {
77+
sprint("✘ Claude")
78+
//page_claude.MustPDF("./tmp/Claude✘.pdf")
79+
}
80+
if relogin_claude == false {
81+
sprint("✔ Claude")
82+
for {
83+
select {
84+
case question := <-channel_claude:
85+
question = strings.Replace(question, "\r", "\n", -1)
86+
question = strings.Replace(question, "\"", "\\\"", -1)
87+
question = strings.Replace(question, "\n", "\\n", -1)
88+
question = strings.TrimSuffix(question, "\n")
89+
// re-activate
90+
page_claude.MustNavigate("https://claude.ai/api/account/statsig/" + org_uuid).MustWaitLoad()
91+
record_json := page_claude.MustNavigate("https://claude.ai/api/organizations/" + org_uuid + "/chat_conversations/" + new_uuid).MustElementX("//pre").MustText()
92+
record_chat_messages = gjson.Get(string(record_json), "chat_messages").String()
93+
record_count := gjson.Get(string(response_chat_messages), "#").Int()
94+
page_claude.MustNavigate("https://claude.ai/api/organizations/" + org_uuid).MustWaitLoad()
95+
time.Sleep(3 * time.Second) // delay to simulate human being
96+
//question = strings.Replace(question, `"`, `\"`, -1) // escape " in input text when code into json
97+
98+
//d := `{"completion":{"prompt":"` + question + `","timezone":"Asia/Shanghai","model":"claude-2"},"organization_uuid":"` + org_uuid + `","conversation_uuid":"` + new_uuid + `","text":"` + question + `","attachments":[]}`
99+
d := `{"prompt":"` + question + `","timezone":"Asia/Bangkok","model":"claude-2.1","attachments":[],"files":[]}`
100+
//fmt.Println(d)
101+
//js := `
102+
// (sdata, new_uuid) => {
103+
// var xhr = new XMLHttpRequest();
104+
// xhr.open("POST", "https://claude.ai/api/append_message");
105+
// xhr.setRequestHeader('Content-Type', 'application/json');
106+
// xhr.setRequestHeader('Referer', 'https://claude.ai/chat/new_uuid');
107+
// xhr.setRequestHeader('Origin', 'https://claude.ai');
108+
// xhr.setRequestHeader('TE', 'trailers');
109+
// xhr.setRequestHeader('Connection', 'keep-alive');
110+
// xhr.setRequestHeader('Accept', 'text/event-stream, text/event-stream');
111+
// xhr.onreadystatechange = function() {
112+
// if (xhr.readyState == XMLHttpRequest.DONE) {
113+
// var res_text = xhr.responseText;
114+
// console.log(res_text);
115+
// }
116+
// }
117+
// console.log(sdata);
118+
// xhr.send(sdata);
119+
// }
120+
// `
121+
js := `
122+
(sdata, org_uuid, new_uuid) => {
123+
var xhr = new XMLHttpRequest();
124+
xhr.open("POST", "https://claude.ai/api/organizations/org_uuid/chat_conversations/new_uuid/completion");
125+
xhr.setRequestHeader('Content-Type', 'application/json');
126+
xhr.setRequestHeader('Referer', 'https://claude.ai/chat/new_uuid');
127+
xhr.setRequestHeader('Origin', 'https://claude.ai');
128+
xhr.setRequestHeader('TE', 'trailers');
129+
xhr.setRequestHeader('Connection', 'keep-alive');
130+
xhr.setRequestHeader('Accept', 'text/event-stream, text/event-stream');
131+
xhr.onreadystatechange = function() {
132+
if (xhr.readyState == XMLHttpRequest.DONE) {
133+
var res_text = xhr.responseText;
134+
console.log(res_text);
135+
}
136+
}
137+
console.log(sdata);
138+
xhr.send(sdata);
139+
}
140+
`
141+
page_claude.MustEval(js, d, org_uuid, new_uuid).Str()
142+
fmt.Println("Claude generating...", role)
143+
if role == ".all" {
144+
channel_claude <- "click_claude"
145+
}
146+
time.Sleep(3 * time.Second) // delay to simulate human being
147+
148+
// wait answer
149+
var claude_response = false
150+
var response_json string
151+
for i := 1; i <= 20; i++ {
152+
if page_claude.MustNavigate("https://claude.ai/api/organizations/" + org_uuid + "/chat_conversations/" + new_uuid).MustHasX("//pre") {
153+
response_json = page_claude.MustNavigate("https://claude.ai/api/organizations/" + org_uuid + "/chat_conversations/" + new_uuid).MustElementX("//pre").MustText()
154+
response_chat_messages = gjson.Get(string(response_json), "chat_messages").String()
155+
count := gjson.Get(string(response_chat_messages), "#").Int()
156+
157+
if response_chat_messages != record_chat_messages && count == record_count+2 {
158+
claude_response = true
159+
record_chat_messages = response_chat_messages
160+
break
161+
}
162+
}
163+
time.Sleep(3 * time.Second)
164+
}
165+
if claude_response == true {
166+
count := gjson.Get(string(response_chat_messages), "#").Int()
167+
answer := gjson.Get(string(response_json), "chat_messages.#(index=="+strconv.FormatInt(count-1, 10)+").text").String()
168+
channel_claude <- answer
169+
} else {
170+
channel_claude <- "✘✘ Claude, Please check the internet connection and verify login status."
171+
relogin_claude = true
172+
//page_claude.MustPDF("./tmp/Claude✘.pdf")
173+
}
174+
}
175+
}
176+
}
177+
178+
}

falcon180.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func Falcon180() {
4040
for {
4141
select {
4242
case question := <-channel_falcon180:
43-
//page_hc.MustActivate()
43+
//page_falcon180.MustActivate()
4444
//fmt.Println("Falcon180 received question...", question)
4545
for i := 1; i <= 20; i++ {
4646
if page_falcon180.MustHasX("//textarea[@data-testid='textbox']") {

0 commit comments

Comments
 (0)