Created
February 13, 2020 14:29
-
-
Save roscopecoltran/8e737b20202beb0edcfb5d2ed38e4ab2 to your computer and use it in GitHub Desktop.
twitter bot in golang and selenium/chrome
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"os" | |
"time" | |
log "github.com/sirupsen/logrus" | |
"github.com/tebeka/selenium" | |
"github.com/tebeka/selenium/chrome" | |
) | |
/* | |
brew install selenium-server-standalone | |
brew install chromedriver | |
brew services restart selenium-server-standalone | |
brew services restart chromedriver | |
*/ | |
var ( | |
debugMode = false | |
addMedia = false | |
wd selenium.WebDriver | |
) | |
func main() { | |
caps := selenium.Capabilities{"browserName": "chrome"} | |
chromeCaps := chrome.Capabilities{ | |
Args: []string{ | |
// "--headless", | |
"--no-sandbox", | |
"--start-maximized", | |
"--window-size=1920,1080", | |
"--disable-crash-reporter", | |
"--hide-scrollbars", | |
"--disable-gpu", | |
"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7", | |
}, | |
} | |
caps.AddChrome(chromeCaps) | |
wd, err := selenium.NewRemote(caps, "") | |
if err != nil { | |
panic(err) | |
} | |
defer wd.Quit() | |
wd.Get("https://twitter.com/login") | |
wd.SetImplicitWaitTimeout(2 * time.Second) | |
// write email | |
emailInput, err := wd.FindElement(selenium.ByXPATH, "//input[@name=\"session[username_or_email]\"]") | |
if err != nil { | |
log.Warnln(err) | |
} | |
if err := emailInput.SendKeys("x0rzkov"); err != nil { | |
log.Warnln(err) | |
} | |
// write password | |
passwordInput, err := wd.FindElement(selenium.ByName, `session[password]`) | |
if err != nil { | |
log.Warnln(err) | |
} | |
if err := passwordInput.SendKeys("ada33ve79T!"); err != nil { | |
log.Warnln(err) | |
} | |
// submit the login form | |
form, err := wd.FindElement(selenium.ByXPATH, "//div[@data-testid='LoginForm_Login_Button']") | |
if err != nil { | |
panic(err) | |
} | |
if err := form.Click(); err != nil { | |
panic(err) | |
} | |
// go to the twitter compose page | |
wd.Get("https://twitter.com/compose/tweet") | |
wd.SetImplicitWaitTimeout(2 * time.Second) | |
// click on the draft editor | |
tweetInput, err := wd.FindElement(selenium.ByClassName, "DraftEditor-root") | |
if err != nil { | |
log.Warnln(err) | |
} | |
if err := tweetInput.Click(); err != nil { | |
panic(err) | |
} | |
// wd.SetImplicitWaitTimeout(1 * time.Second) | |
// write the text | |
textTweet, err := wd.FindElement(selenium.ByCSSSelector, "br[data-text=\"true\"]") | |
if err != nil { | |
panic(err) | |
} | |
if err := textTweet.SendKeys("hello world from #x0rzkov let's rock"); err != nil { | |
log.Warnln(err) | |
} | |
// add media (not working for now) | |
if addMedia { | |
tweetMediaInput, err := wd.FindElement(selenium.ByCSSSelector, "input[type=\"file\"]") | |
if err != nil { | |
log.Warnln(err) | |
} | |
tweetMediaInput.SendKeys("/Users/xxxxxxx/Downloads/57980167-ef242900-7a44-11e9-8425-73560b1d1e0a.gif") | |
} | |
// submit the tweet | |
formTweet, err := wd.FindElement(selenium.ByCSSSelector, "div[data-testid = 'tweetButton'][role = 'button']") | |
if err != nil { | |
panic(err) | |
} | |
// os.Exit(1) | |
if err := formTweet.Click(); err != nil { | |
panic(err) | |
} | |
wd.Close() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment