Wie man einen Twitter Bot zum Crawlen von Website-Grafiken automatisiert
Visualisierungen und Screenshots von Inhalten aktueller Projekte können in den sozialen Medien sehr effektiv und aufmerksamkeitsstark sein. Doch das Arbeiten an Social Media-Inhalten kann stressig, eintönig und repetetiv sein. Twitter ist eine der effektivsten Social Media-Kanäle, um mit Ihren Followern in Kontakt zu treten. Dank Selenium und der Twitter Python API Tweepy gibt es Möglichkeiten, das Tweeten von Inhalten zu automatisieren! In diesem Tutorial erklären wir, wie man das Posten auf Twitter mithilfe von Selenium automatisieren kann, um Screenshots von Websites zu erstellen.
Automatisierung von Selenium für Screenshots
Voraussetzungen
- Laden sie den Driver für Firefox oder Chrome herunter, eine Liste mit den unterstützen Browsern finden Sie hier.
- Installieren Sie Selenium in Ihrer Arbeitsumgebung. Unten finden Sie den pip Befehl für die Installation der neuesten Version:
pip install --upgrade selenium
pip install webdriver_manager
Step 1: Importieren der benötigten Module
from selenium import webdriver
from PIL import Image
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from requests import get
import datetime
import requests
from webdriver_manager.chrome import ChromeDriverManager
Step 2: Schreiben wir eine Funktion zum Starten des Browsers, Screenshot erstellen und lokalen Speichern des Bildes
Als Beispiel nehmen wir die Grafik “Wer wird Bundeskanzler*in?” auf unserer Website zur Bundestagswahlprognose 2021.
Step 3: Initialisierung des Chrome webdriver
Wir initialisieren den Chrome-Treiber, indem wir die neueste Version des Chrome-Treibers über die ChromeDriverManager-Bibliothek installieren. Anschließend leiten wir die URL an den Treiber weiter, um den Zugriff auf die Website zu bekommen.
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.wer-gewinnt-die-wahl.de/")
Dann warten wir geduldig circa 60 Sekunden und verzögern anschließend noch einmal 10 Sekunden, bis die Website vollständig geladen ist:
driver.implicitly_wait(60)
delay = 10
Da wir mit Selenium einen Screenshot machen möchten, müssen wir dazu möglicherweise etwas scrollen. Daher verwenden wir window.scrollTo(0, 1000)
, um den Browser anzuweisen 1000 Frames nach unten zu scrollen (möglicherweise muss man mit diesem Parameter etwas herumspielen um den gewünschten Frame auf der Website zu finden).
driver.execute_script("window.scrollTo(0, 1000)")
WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CLASS_NAME, 'chart-container')))
Anschließend weisen wir den Treiber an, zu warten, bis das gewünschte grafische Element angezeigt wird, bevor wir mit dem Screenshot fortfahren.
Step 4: Screenshot speichern
Wir verwenden die Funktion save_screenshot('nameyourpic.png')
, um den Screenshot lokal zu speichern:
driver.save_screenshot('fullPageScreenshot.png')
fullImg = Image.open('fullPageScreenshot.png')
Step 5: Screenshot zuschneiden
Nachdem wir den Screenshot als Grafik gespeichert haben, können wir ihn automatisch auf die gewünschte Größe zuschneiden. Die Abmessungen repräsentieren die finale Größe der Grafik: die Höhe, Breite und X-, Y-Positionen angibt.
cropImg = fullImg.crop((0,0,1530,854)) # x,y,width,height of picture
cropImg.save(str(date)+'_koalition.png')
driver.quit()
Voilà! Überprüfen Sie Ihr lokales Verzeichnis, dort finden Sie den gespeicherten Screenshot!
Hier noch einmal der gesamte Code zum Automatisieren der Erstellung des Website-Screenshots:
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from PIL import Image
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from requests import get
import datetime
import requests
from webdriver_manager.chrome import ChromeDriverManager
date = datetime.datetime.now().strftime('%Y-%m-%d')
def get_green_shot(date):
driver = webdriver.Chrome(ChromeDriverManager().install()) #webdriver.Chrome()
driver.get("https://www.wer-gewinnt-die-wahl.de/")
driver.implicitly_wait(60)
delay = 10
driver.execute_script("window.scrollTo(0, 1000)")
WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CLASS_NAME, 'chart-container')))
driver.save_screenshot("fullPageScreenshot.png")
fullImg = Image.open('fullPageScreenshot.png')
cropImg = fullImg.crop((0,0,1530,854)) # x,y,width,height of picture frame
cropImg.save(str(date)+'screenshot.png')
driver.quit()
print('SUCCESSFUL screenshot taken and saved')
if __name__ == "__main__":
get_green_shot(date)
Part 2: Automatisierung der Veröffentlichung der Screenshots als Tweets
Voraussetzung für diesen Teil ist die eine erfolgreiche Beantragung bei der Twitter Developer API. Die Anleitung dafür finden Sie hier. Nachdem Sie Ihre API-Token bekommen haben, können Sie auf diese vier Schlüssel zugreifen:
- consumerKey
- consumerSecret
- accessTokenKey
- accessTokenSecret
Step 1: Authentifizierung
Authentifizieren Sie Ihre API-Token, indem Sie Tweepy importieren (Tweepy haben wir in Teil 1 dieses Tutorials installiert).
# Authenticate to Twitter
import tweepy
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
# Create API object
api = tweepy.API(auth)
Step 2: Inhalt des Tweets erstellen
Schreiben Sie Ihre Nachricht oder den Inhalt, den Sie zusammen mit dem Screenshot auf Twitter veröffentlichen möchten. api.update_with_media(img, status=message)
ist die Funktion, mit der Sie Ihren Screenshot und die Nachricht über die API an Twitter senden.
######################## POST Images & message ############################
message = """31.03.21 | #Wahlprognose Update 🗳️
Wahrscheinlichkeit, dass #GrünRotRot 🟢🔴🔴 (#Grüne - #SPD - #dieLinke) die
rechnerische Mehrheit erhält, ist seit Beginn des Monats
von 9% auf 34% gestiegen
#bundestagswahl #btw21 #wergewinntdiewahl
"""
#img = r"2021_03_31_TwitterScreenshot.png" # inside the directory
img = image
api.update_with_media(img, status=message)
Es gibt auch die Alternative im Voraus Nachrichten in einem Google Sheet zu sammeln und die Veröffentlichung der einzelnen Tweets zeitlich zu planen und zu automatisieren, um regelmäßigen Traffic für Ihr Unternehmen zu produzieren. Und das ohne jedes Mal händisch eingreifen zu müssen. Das Tutorial für diese Vorgehensweise finden Sie hier.
Hier nochmal der Code im Ganzen:
import os
import tweepy
from PIL import Image
import datetime
def Tweet(image,message):
"""
message:: string that reflect the message in the Twitter post
image:: path of png picture in the same directory
"""
CONSUMER_KEY = 'xxx'
CONSUMER_SECRET = 'xxx'
ACCESS_TOKEN = 'xxx'
ACCESS_TOKEN_SECRET = 'xxx'
# Authenticate to Twitter
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
# Create API object
api = tweepy.API(auth)
######################## POST Images & message ############################
message = """31.03.21 | #Wahlprognose Update 🗳️
Wahrscheinlichkeit, dass #GrünRotRot 🟢🔴🔴 (#Grüne - #SPD - #dieLinke)
die rechnerische Mehrheit erhält, ist seit Beginn des Monats
von 9% auf 34% gestiegen
#bundestagswahl #btw21 #wergewinntdiewahl
"""
#img = r"2021_03_31_TwitterScreenshot.png" # inside the directory
img = image
api.update_with_media(img, status=message)
return 'message tweet successful'
if __name__ == "__main__":
message = input("*Please Insert your daily tweet here, or leave it blank*: ")
image = str((date)+'screenshot.png')
Tweet(image, message)
Jetzt können Sie zu einer Website gehen, mit Ihrem Selenium-Browser einen Screenshot erstellen, ihn auf dem Computer speichern, das Bild automatisch zuschneiden und schließlich die Veröffentlichung des Bildes zusammen mit einer Nachricht auf Twitter automatisieren. Nachdem Sie das Skript hierfür geschrieben haben, können Sie einen zeitlich automatisierten Job unter Windows oder einen Cron-Job ausführen, um Ihr Skript zu einer bestimmten Tages- oder Wochenzeit auszuführen. Eine Anleitung dafür ist hier. Diese Anwendung erleichtert Ihnen nicht nur die Arbeit als Social Media-Administrator, sondern spart Ihnen auch Zeit. Letztendlich kann diese Anwendung den Traffic auf Ihre Website und Ihr Unternehmen erheblich steigern. Happy coding!