2017-01-05 6 views
1

So kürzlich habe ich an einem Projekt in Python gearbeitet. Es ist ein Omeglebot. Aber wenn sie den Code trennen, scheint nur zu stoppen. Und läuft nicht weiter. Warum ist das?Selen funktioniert nicht?

from selenium import webdriver 
import random 
import time 

chrome_path = r"C:\Users\isak\Downloads\chromedriver_win32\chromedriver.exe" 
with open('omegle_test_bot.txt', 'r') as words: 
    read = words.read() 
words = read.split('\n') 

driver = webdriver.Chrome(chrome_path) 
driver.get('http://www.omegle.com/') 
interests = driver.find_element_by_class_name('newtopicinput') 
interests.send_keys('programming\npython\nsoundcloud\nhigh\nweed\n') 
time.sleep(7) 
driver.find_element_by_xpath("""//*[@id="videobtn"]""").click() 
time.sleep(2) 
def if_disconnect(): 
    time.sleep(1) 
    driver.find_element_by_class_name('disconnectbtn').click() 
    Main() 
def Main(): 
    while True: 
     text_box = driver.find_element_by_class_name('chatmsg') 
     word = random.choice(words) 
     text_box.send_keys(random.choice(words)) 
     driver.find_element_by_class_name('sendbtn').click() 

Main() 
if_disconenct() 
+0

Wer etwas trennen ?! Zeigen Sie auf die genaue Codezeile, die Ihr Problem verursacht – Andersson

+2

Wird eine Ausnahme ausgelöst? Sie müssen 'main()' unter eine 'try'-Klausel und' if_disconnect() 'in den except-Block setzen. Bitte geben Sie alle Fehlermeldungen an, die Sie erhalten! – sytech

+0

@sytech Nun, ich hatte eine Idee, um nach einer Schaltfläche auf der Website zu suchen, die nur angezeigt würde, wenn die Verbindung unterbrochen wurde. – isak

Antwort

1

Das Problem ist, dass die Code-Nachrichten permanent ohne wartet senden: Sie Eingabefeld suchen, senden Tasten, Suchtaste, klicken immer und immer wieder ... Wenn Ihr Gast trennt, er Seitenaktualisierung auslösen und In einem Moment kann Ihr Code das Eingabefeld oder die Schaltfläche nicht finden und das Skript stoppt. Möglicherweise müssen Explicit wait verwenden, zu warten, bis Ihr Element, bevor Sie versuchen verfügbar wird es zu handhaben:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

text_box = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "chatmsg"))) 
text_box.send_keys(random.choice(words)) 
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "sendbtn"))).click() 

Beachten Sie auch, dass dieses Stück Code word = random.choice(words) nichts tun (Sie nicht verwenden word Variable im Code).

Da Ihre main() keine Bedingung hat laufen zu stoppen (enthält keine break), besteht keine Möglichkeit, if_disconect() zu laufen ... je

+0

Vielen Dank (: – isak

+0

) Aber ich verstehe nicht wirklich vollständig können Sie diesen Code in meinem Kabeljau implementieren e so würde es einfach wie ein Programm funktionieren? (: – isak

+0

haha ​​no need Vielen Dank so viel. Ich habe es einfach in meinen Code eingefügt und es hat funktioniert. Jetzt muss ich darüber lernen und warum es funktioniert (: Vielen Dank (: – isak