2017-06-20 7 views
0

Ich habe versucht, die folgende Website (http://epl.squawka.com/english-premier-league/21-05-2017/watford-vs-man-city/matches) zu kratzen. Was ich tun möchte, ist klicken Sie auf "Shots", dann lassen Sie das Javascript laden und dann über jedes der "Shot-Elemente" und ziehen Sie die Daten, die angezeigt wird (die Zeit und Spielerinfo).Scraping Problem mit Python & Selenium (Element kann nicht gefunden werden)

Mein Problem ist, dass ich immer noch einen "Unable to locate element" -Fehler bekomme, wenn ich versuche, den Mauszeiger über die "Shot-Elemente" zu bewegen. Wenn ich die page_source an dem Punkt drucke, an dem ich das versuche, kann ich deutlich sehen, dass die Elemente tatsächlich da sind und auch sichtbar, wenn ich einen Screenshot speichere.

Ich denke, die Elemente können irgendwie versteckt werden. Ich habe versucht "zu wechseln" (vielleicht falsch) ohne Erfolg.

driver = webdriver.Firefox(executable_path='/usr/bin/geckodriver') 
driver.get("http://epl.squawka.com/english-premier-league/21-05-2017/watford-vs-man-city/matches") 

try: 
    element = WebDriverWait(driver, 1000).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='mc-content-wrap']/div[2]/div[1]"))) 
finally: 
    driver.find_element_by_xpath("//*[@id='mc-content-wrap']/div[2]/div[1]").click() 

time.sleep(1) 
driver.find_element_by_id("mc-stat-shot").click() 
time.sleep(5) 
shotsVar = -1 
html = driver.page_source 
bsObj = BeautifulSoup(html, "html.parser") 
for circle in bsObj.find("svg",{'height':'224.6'}).findAll('circle'): 
    shotsVar += 1 
    if circle['r'] == '6.5': 
     shotsXpathCode = ("//*[@id='mc-pitch-view']/div[2]/div[1]/svg/g[%s]/circle" % shotsVar) 
     print(shotsXpathCode) 
     try: 
      element = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH,"%s" % shotsXpathCode))) 
     finally: 
      element_to_hover_over = driver.find_element_by_xpath("%s" % shotsXpathCode) 
      hover = ActionChains(driver).move_to_element(element_to_hover_over) 
      hover.perform() 

Antwort

0

Xpath und SVG scheinen nicht gut zusammen zu arbeiten.

Versuchen Sie, die folgende XPath:

"//*[@id='mc-pitch-view']/div[2]/div[1]/*[name()='svg']/*[name()='g'][%s]/*[name()='circle']" 

Verwandte: Find the nth child under svg using xpath

+0

Amazing! Das hat funktioniert! Vielen Dank! –

Verwandte Themen