a headless browser phantomjs for golang
import (
"fmt"
"io/ioutil"
"net/http"
. "github.com/k4s/phantomgo"
)
func main() {
p := &Param{
Method: "POST", //POST or GET ..
Url: "http://localhost/go_test/1.php",
Header: http.Header{"Cookie": []string{"your cookies"}},
UsePhantomJS: true,
PostBody: "aaa=111",
}
brower := NewPhantom()
resp, err := brower.Download(p)
if err != nil {
fmt.Println(err)
}
body, err := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
make the phantomjs yourself to the phantomjs javaScript interface:
package main
import (
"fmt"
"github.com/k4s/phantomgo"
"io/ioutil"
)
func main() {
p := phantomgo.NewPhantom()
js := `
var system = require('system');
console.log(system.args[0],system.args[1],system.args[2]);
phantom.exit();
`
res, _ := p.Exec(js,"11","22")
output, _ := ioutil.ReadAll(res)
fmt.Println(string(output))
}
a example simulate login by cookies, so you can get web data login after:
package main
import (
"fmt"
"github.com/k4s/phantomgo"
"io/ioutil"
)
func main() {
p := phantomgo.NewPhantom()
js := `
var page = require('webpage').create(),
system = require('system'),
address;
page.settings.userAgent = 'Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)';
phantom.cookiesEnabled = true;
phantom.addCookie({
'name' : 'Apache(do yourself)',
'value' : '63354989(do yourself)',
'domain' :'.weibo.com'});
phantom.addCookie({
'name' : 'SINAGLOBAL(do yourself)',
'value' : '8156705307(do yourself)',
'domain' :'.weibo.com'});
phantom.addCookie({
'name' : 'SUB(do yourself)',
'value' : '_2A257NF5qDeTxGeNK6VUT8izMzjmIHXVY12Ii(do yourself)',
'domain' :'.weibo.com'});
phantom.addCookie({
'name' : 'SUBP(do yourself)',
'value' : '0033WrSXqPxfM725Ws9jqgMF55529P9D9WhnL77(do yourself)',
'domain' :'.weibo.com'});
if (system.args.length === 1) {
phantom.exit(1);
} else {
address = system.args[1];
page.open(address, function (status) {
console.log(page.content);
phantom.exit();
});
}
`
res, _ := p.Exec(js, "http://weibo.com/55555555/fans?rightmod=1&wvr=6")
output, _ := ioutil.ReadAll(res)
fmt.Println(string(output))
}