質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

539閲覧

Go + React + agouti でレスポンスされた文字列を取得できない

mimi_129

総合スコア63

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2022/01/29 04:24

前提・実現したいこと

実現したい事は、
React(axios)からapi化したGoにagoutiのキック

agoutiでheadlessでスクレイピングを行い対象の情報を取得

axiosで帰ってきた文字列を取得
です。

最後の「axiosで帰ってきた文字列を取得」が上手くいきません。

適当に作ったプロジェクトでmain.goのみを動かしてみましたが、
そこでは上手く動作したのでagouti自体は動くプログラムになっていると思います。

axiosからgoへのキックが上手くいっていない?ように見えるのですが。。

環境はDocker上で各種展開、
Webサーバーはnginxです。

何か分かる方がいれば宜しくお願いします。

App.js

import React from 'react'; import axios from 'axios'; class App extends React.Component { handleSubmit(event) { axios.get('/api') .then((response) => { console.log(response); }) .catch(console.error); } handleSubmit2(event) { axios.get('/api/py') .then((response) => { console.log(response); }) .catch(console.error); } handleSubmit3(event) { axios.get('/api/ls') .then((response) => { console.log(response); }) .catch(console.error); } render() { return ( <div> <input type="button" value="Submit" onClick={this.handleSubmit}/> <input type="button" value="Submit2" onClick={this.handleSubmit2}/> <input type="button" value="Submit3" onClick={this.handleSubmit3}/> </div> ) } } export default App;

main.go

1package main 2 3import ( 4 "fmt" 5 "net/http" 6 "os" 7 "os/exec" 8 9 "github.com/sclevine/agouti" 10) 11 12func main() { 13 14 http.HandleFunc("/", echoHello) 15 16 http.HandleFunc("/py", echoHello2) 17 18 http.HandleFunc("/ls", echoHello3) 19 // port 20 http.ListenAndServe(":8000", nil) 21} 22 23func echoHello(w http.ResponseWriter, r *http.Request) { 24 fmt.Fprintf(w, "<h1>Hello World</h1>") 25} 26 27func echoHello2(w http.ResponseWriter, r *http.Request) { 28 29 options := agouti.ChromeOptions( 30 "args", []string{ 31 "--headless", 32 "--disable-gpu", 33 }) 34 35 driver := agouti.ChromeDriver(options) 36 defer driver.Stop() 37 driver.Start() 38 39 page, err := driver.NewPage() 40 if err != nil { 41 fmt.Fprintf(os.Stderr, "%s\n", err) 42 return 43 } 44 45 page.Navigate("https://qiita.com/") 46 47 title, err := page.Title() 48 if err != nil { 49 fmt.Print(err.Error()) 50 } 51 52 fmt.Fprintf(w, title) 53} 54 55func echoHello3(w http.ResponseWriter, r *http.Request) { 56 57 output, err := exec.Command("ls").Output() 58 if err != nil { 59 fmt.Print(err.Error()) 60 } 61 62 fmt.Fprintf(w, string(output)) 63} 64

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました。

そもそもDockerにChromeが入っていないのと、
Docker上にchromedriverが無いせいでした。

DockerFileで、
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add &&
wget http://dl.google.com/linux/deb/pool/main/g/google-chrome-unstable/google-chrome-unstable_93.0.4577.18-1_amd64.deb &&
apt-get install -y -f ./google-chrome-unstable_93.0.4577.18-1_amd64.deb

ADD https://chromedriver.storage.googleapis.com/93.0.4577.15/chromedriver_linux64.zip /usr/local/go/bin/
RUN cd /usr/local/go/bin/ &&
unzip chromedriver_linux64.zip
を追記したら動作しました。

ちなみに、以下がchrome起動時に与えたオプションです。
"--headless",
"--window-size=300,1200",
"--blink-settings=imagesEnabled=false",
"--disable-gpu",
"no-sandbox",
"disable-dev-shm-usage",

投稿2022/01/29 08:31

編集2022/01/29 08:37
mimi_129

総合スコア63

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問