Klick auf Element mit classname selenium

Ich versuche, die Öffnungszeiten von Bars von einer Website zu kratzen. Es gibt eine Liste von Bars, die dann, wenn Sie zu Ihnen navigieren die Öffnungszeiten zur Verfügung stehen. Ich habe ein Problem, das auf ein Element klickt, wenn es einen Klassennamen hat.

Ich habe den Code geschrieben, um die Stunden von einem Ort zu bekommen, aber ich bin nicht in der Lage, zu jedem Veranstaltungsort aus dem ersten Link zu navigieren.

Dieser Code funktioniert, wenn ich die Stunden für einen Veranstaltungsort bekomme

from selenium import webdriver driver = webdriver.Firefox() driver.get('https://www.designmynight.com/london/bars/soho/six-storeys') hours = driver.find_element_by_xpath('//li[@id="hours"]') hours.click() hoursTable = driver.find_elements_by_css_selector("table.opening-times tr") for row in hoursTable: print(row.text) 

Das Problem ist, wenn ich versuche, auf diese Seite zu navigieren, kann ich nicht in jeden Link klicken. Kann jemand sehen was ich falsch mache?

 from selenium import webdriver driver = webdriver.Firefox() driver.get('https://www.designmynight.com/london/search-results#!?type_of_venue=512b2019d5d190d2978c9ea9&type_of_venue=512b2019d5d190d2978c9ea8&type_of_venue=512b2019d5d190d2978c9ead&type_of_venue=512b2019d5d190d2978c9eaa&type_of_venue=512b2019d5d190d2978c9eab&type=&q=&radius=') venue = driver.find_element_by_xpath('//a[@class="ng-binding"]') venue.click() //this should then lead me to the following link -> driver.get('https://www.designmynight.com/london/bars/soho/six-storeys') hours = driver.find_element_by_xpath('//li[@id="hours"]') hours.click() hoursTable = driver.find_elements_by_css_selector("table.opening-times tr") for row in hoursTable: print(row.text) 

  • Python Selen: Wie kann man überprüfen, ob der WebDriver aufgehört hat ()?
  • Automatisieren Web-Browsing mit Python
  • 'Objekt ist nicht kündbar' Fehler bei der Verwendung von Selen (Python)
  • Selen Webdriver python: Element ist derzeit nicht sichtbar und gleicher Klassenname
  • Wie bekomme ich alle Daten von einer Webseite, die die Lazy-Loading-Methode manipuliert?
  • Browser-Performance-Tests durch Selen
  • Nehmen Sie eine Seite mit Selenium Web Driver
  • Wie finde ich Knoten und seine untergeordneten Knoten mit Selen mit Python
  • 2 Solutions collect form web for “Klick auf Element mit classname selenium”

    Alle Links mit ng-binding Klassennamen werden dynamisch generiert, also musst du warten, bis der Link in DOM erscheint und es auch anklickbar ist:

     from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait as wait from selenium.webdriver.common.by import By from selenium import webdriver driver = webdriver.Firefox() driver.get('https://www.designmynight.com/london/search-results#!?type_of_venue=512b2019d5d190d2978c9ea9&type_of_venue=512b2019d5d190d2978c9ea8&type_of_venue=512b2019d5d190d2978c9ead&type_of_venue=512b2019d5d190d2978c9eaa&type_of_venue=512b2019d5d190d2978c9eab&type=&q=&radius=') venue = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//a[@class="ng-binding"]'))) venue.click() 

    Aber wenn du jedem Link folgen willst, würde ich dir vorschlagen, dass du nicht auf diese Links klickst, sondern die Liste der Referenzen bekommst und dann jeden wie folgt öffnen kannst:

     xpath = '//a[@class="ng-binding"]' wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, xpath))) links = [venue.get_attribute('href') for venue in driver.find_elements_by_xpath(xpath)] for link in links: driver.get(link) hours = driver.find_element_by_xpath('//li[@id="hours"]') hours.click() hoursTable = driver.find_elements_by_css_selector("table.opening-times tr") for row in hoursTable: print(row.text) 

    Ich habe das Problem, dass der Fahrer versucht, das Element zu finden, bevor es im DOM verfügbar ist. Versuche es zu warten, bis das Element vorhanden ist, anstatt es direkt zu finden. Sie könnten diese Zeile ersetzen:

     venue = driver.find_element_by_xpath('//a[@class="ng-binding"]') 

    mit:

     venue = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//a[@class="ng-binding"]'))) 

    Beachten Sie, dass Sie ein paar Importe machen müssen, um dies zu tun:

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

    Quelle: http://selenium-python.readthedocs.io/waits.html

    Python ist die beste Programmiersprache der Welt.