2016-06-09 11 views
1

Ich fing an, Webseiten mit Python und Selen zu scrappen. Ich wähle Selen, weil ich durch die Website navigieren muss und ich mich auch anmelden muss.Webscrape Flashscore mit Python/Selen

Ich schrieb ein Skript, das in der Lage ist, ein Firefox-Fenster zu öffnen, und es öffnet die Website www.flashscore.com. Mit diesem Skript kann ich mich auch anmelden und zu den verschiedenen Sportbereichen (Hauptmenü) navigieren, die sie haben.

Der Code:


from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

# open website 
driver = webdriver.Firefox() 
driver.get("http://www.flashscore.com") 

# login 
driver.find_element_by_id('signIn').click() 

username = driver.find_element_by_id("email") 
password = driver.find_element_by_id("passwd") 

username.send_keys("*****") 
password.send_keys("*****") 

driver.find_element_by_name("login").click() 

# go to the tennis section 
link = driver.find_element_by_link_text('Tennis') 
link.click() 

#go to the live games tab in the tennis section 

# ?????????????????????????????' 

Dann ging es schwieriger. Ich möchte zum Beispiel auch zu den Bereichen "Live-Spiele" und "fertige" Tabs im Sportbereich navigieren. Dieser Teil würde nicht funktionieren. Ich habe viele Dinge ausprobiert, aber ich kann nicht auf eine dieser Registerkarten kommen. Bei der Analyse der Website sehe ich, dass sie einige Iframes verwenden. Ich finde auch etwas Code, um zu einem Iframes-Fenster zu wechseln. Aber das Problem ist, ich kann den Namen des Iframe nicht finden, wo die Registerkarten sind, auf die ich klicken möchte. Vielleicht sind die Iframes nicht das Problem und schaue ich in die falsche Richtung. (Vielleicht wird das Problem durch einige Javascript verursacht?)

Kann mir bitte jemand dabei helfen?

Antwort

0

Nein, die Iframes sind in diesem Fall nicht das Problem. Das Element "Live-Spiele" befindet sich nicht in einem iframe. Finde es durch Link-Text und klicken Sie auf:

live_games_link = driver.find_element_by_link_text("LIVE Games") 
live_games_link.click() 

Sie auf warten müssen für diesen Link angeklickt werden, um, bevor sie tatsächlich versuchen, es zu klicken:

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

wait = WebDriverWait(driver, 10) 

live_games_link = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "LIVE Games"))) 
live_games_link.click() 
+0

Vielen Dank für die Reaktion. Ein Problem. Ich erhalte einen Fehler beim Ausführen meines Skripts. – timovic

+0

Bei der Ausführung dieser: von Selen Import WebDriver von selenium.webdriver.common.keys importieren Keys von selenium.webdriver.support.ui Import von selenium.webdriver.support Import expected_conditions als EC von selenium.webdriver.common WebDriverWait. durch Import von # offen Website driver = webdriver.Firefox() driver.get ("http://www.flashscore.com") #go auf den Live-Spielen Tab im Tennis Abschnitt live_games_link = Warte .until (EC.element_zu_be_klickbar ((By.LINK_TEXT, "LIVE Games"))) live_spiele_link.click() – timovic

+0

Ich bekomme den Fehler: live_games_link = wait.until (EC.eleme nt_to_be_clickable ((By.LINK_TEXT, "LIVE Games"))) NameError: Name 'wait' ist nicht definiert – timovic