Instagram Like bot

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
flxraw
User
Beiträge: 7
Registriert: Donnerstag 5. März 2020, 12:42

Hi,
ich habe einen kleinen Lik bot mit Selenium für Instagram geschrieben. Dieser funktioniert soweit auch gut. Jetzt wollte ich noch hinzufügen, dass erkannt wird, wenn das Bild schon geliked wurde, allerdings überspringt der Bot jetzt jedes Bild. Jemand eine Idee wie man das realisieren kann?
Code:
like_xpath ='//span[@aria-label="Gefällt mir"]'
liked_xpath = '//span[@aria-label="Gefällt mir nicht mehr"]'
unliked = self.driver.find_elements_by_xpath(like_xpath)
liked = self.driver.find_elements_by_xpath(liked_xpath)
if unliked:

try:
time.sleep(random.randint(4, 15))
like_button = lambda: driver.find_element_by_class_name("_8-yf5 ").click()
like_button().click()

for second in reversed(range(0, random.randint(18, 28))):
print_same_line("#" + hashtag + ': unique photos left: ' + str(unique_photos)
+ " | Sleeping " + str(second))
time.sleep(2)
except Exception as e:
time.sleep(2)
unique_photos -= 1

elif liked:
unique_photos -= 1
Danke schonmmal für die Hilfe! :)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@flxraw: Schönes Beispiel warum es eine echt blöde Idee ist Ausnahmen zu “behandeln“ in dem man sie ignoriert. Wenn ich Ausnahmen ignoriere schreibe ich in der Regel einen Kommentar warum das okay ist die Ausnahmen zu ignorieren. Warum ist es hier kein Problem so gut wie *alle* Ausnahmen zu ignorieren? Was ist wenn zwischen ``try`` und ``except`` ein Programmierfehler ist? Oder mehr — neben dem offensichtlichen Fehler macht der Code da auch keinen Sinn.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
flxraw
User
Beiträge: 7
Registriert: Donnerstag 5. März 2020, 12:42

Ohne die Bedingung funktioniert es aber so einwandfrei...Der Code ist jetzt einfach nur ein Ausschnitt aus dem Skript. Es geht mir nur darum mit z.b. einer if methhode zu überpüfen ob das Bild schon geliked wurde oder noch nicht....
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@flxraw: In dem ``try``-Block ist ein Fehler der *immer* zu einer Ausnahme führt. Und der ist völlig unabhängig vom ``if``.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
flxraw
User
Beiträge: 7
Registriert: Donnerstag 5. März 2020, 12:42

Und was ist dort der Fehler?:D Ich raff es irgendwie grad nicht.... Außerdem ist der Code so aufgebaut, dass es nur zu dem try kommt wenn die bedingung auch stimmt....
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@flxraw: Tja, wenn es doch nur eine Möglichkeit gäbe wie man Ausnahmen zu Gesicht bekäme…
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
flxraw
User
Beiträge: 7
Registriert: Donnerstag 5. März 2020, 12:42

Ich bin mir eigentlich ziemlich sicher,dass es nicht am try except liegt weil es hat ohne die if else bedingung funktioniert und jetzt nicht mehr ^^
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Oh, es ist auch unmöglich das try-except herauszunehmen oder wenigstens nur die Exceptions abzufangen, die auch wirklich gebraucht werden.
flxraw
User
Beiträge: 7
Registriert: Donnerstag 5. März 2020, 12:42

Und was soll das bringen?! xD Dadurch behebt sich ja das Problem nicht, dass ich habe xD
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Also weißt du wo bzw. was der Fehler/das Problem ist? Sonst würde ich eher auf Leute vertrauen die Erfahrung mit dem Ganzen haben.
flxraw
User
Beiträge: 7
Registriert: Donnerstag 5. März 2020, 12:42

Jein also ich vermute es liegt daran, dass die Bedingung nicht richtig erkannt wir und immer ins elif rein gesprungen wird, weil ohne das elif funktioniert das liken ja einwandfrei, das Problem ist nur, dass schon gelikte Bilder wieder entliked werden und die würde ich dann gerne überspringen. Momentan wird jedes Bild übersprungen...
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Und warum hast du ein Problem damit auf die Tipps zu hören und das kommentarlose Abfangen der Exceptions raus zu nehmen? Dann würdest du nämlich sehen, was für ein Fehler auftaucht und könntest dich diesem widmen.
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bist du sicher, dass die CSS-Klasse "_8-yf5 " immer existiert? Die Vermutung liegt nahe, dass der Klassenname zufällig vergeben wird, um Leuten mit Bots wie dir das Automatisieren zu erschweren... ;)
flxraw
User
Beiträge: 7
Registriert: Donnerstag 5. März 2020, 12:42

Ich hab das doch schon probiert... es gibt keinen Fehler....und ja eigentlich schon weil das liken ja immer funktioniert, also wenn ich die Bedingung raus nehme. Es geht mir wirklich gerade nur darum wie ich überprüfen kann ob schon geliked wurde und dann entsprechend handeln kann...
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Code: Alles auswählen

like_xpath ='//span[@aria-label="Gefällt mir"]'
liked_xpath = '//span[@aria-label="Gefällt mir nicht mehr"]'
unliked = self.driver.find_elements_by_xpath(like_xpath)
liked = self.driver.find_elements_by_xpath(liked_xpath)

if unliked:
	try:
		time.sleep(random.randint(4, 15))
		like_button = lambda: driver.find_element_by_class_name("_8-yf5 ").click()
		like_button().click()

		for second in reversed(range(0, random.randint(18, 28))):
		print_same_line("#" + hashtag + ': unique photos left: ' + str(unique_photos) + " | Sleeping " + str(second))
		time.sleep(2)
	except Exception as e:
		time.sleep(2)
		unique_photos -= 1
		print(e) #Ausgabe eines mögl. Fehlercodes

elif liked:
	unique_photos -= 1
Soweit ich (hoffentlich) richtig verstanden habe, sollst du dir den Fehlercode ausgeben lassen.
Du hast die Ausnahme auch schon als "e" benannt (wenn man nicht gar von Deklaration reden kann?), somit wird dem Fehlercode einer Variable bestimmt: "e", die du ausgeben lassen kannst.

Ich würde niemals einen Code in einem "try"-Block setzen, um einen Fehler zu finden.
Für die Zukunft: lass dir mögliche Fehler ausgeben, so wie im bearbeiteten Code hier, oder lass die "try"-Sache komplett, bis du weißt, dass es funktioniert.
Ich hab das doch schon probiert... es gibt keinen Fehler
Dann muss etwas hier "liked = self.driver.find_elements_by_xpath(liked_xpath)" oder hier "like_xpath ='//span[@aria-label="Gefällt mir"]'" falsch sein.
Falsches Element, etc.
Antworten