Seite 1 von 1

Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 12:48
von flxraw
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! :)

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 13:05
von __blackjack__
@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.

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 13:37
von flxraw
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....

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 13:43
von __blackjack__
@flxraw: In dem ``try``-Block ist ein Fehler der *immer* zu einer Ausnahme führt. Und der ist völlig unabhängig vom ``if``.

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 13:54
von flxraw
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....

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 14:29
von __blackjack__
@flxraw: Tja, wenn es doch nur eine Möglichkeit gäbe wie man Ausnahmen zu Gesicht bekäme…

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 14:58
von flxraw
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 ^^

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 15:25
von Sirius3
Oh, es ist auch unmöglich das try-except herauszunehmen oder wenigstens nur die Exceptions abzufangen, die auch wirklich gebraucht werden.

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 15:41
von flxraw
Und was soll das bringen?! xD Dadurch behebt sich ja das Problem nicht, dass ich habe xD

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 15:50
von Jankie
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.

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 15:57
von flxraw
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...

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 16:17
von einfachTobi
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.

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 16:35
von snafu
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... ;)

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 16:45
von flxraw
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...

Re: Instagram Like bot

Verfasst: Donnerstag 5. März 2020, 18:16
von xXSkyWalkerXx1

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.