Home > other >  Selenium Multiple Elements Selection Python
Selenium Multiple Elements Selection Python

Time:12-07

I am trying to extract all available elements for the Xpath, and I did try element with 's' and without and cant seem to make it work. being 'Element' its alright but only returns me the first result and with 'Elements' it gives me an error : "AttributeError: 'list' object has no attribute 'find_elements'"

My code : from selenium.webdriver.common.by import By from selenium import webdriver

url = 'https://automira.ro/dealeri-autorizati/lista'

PATH = 'C:\\Users\\czoca\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Python 3.6\\chromedriver.exe'

driver = webdriver.Chrome(PATH)
driver.get(url)

driver.maximize_window()# For maximizing window
driver.implicitly_wait(100)# gives an implicit wait for 20 seconds

dealers = driver.find_elements(By.XPATH, '/html/body/div[4]/div/div[3]/div/div[1]')

for dealer in dealers:
    name = dealer.find_elements(By.XPATH, "/html/body/div[4]/div/div[3]/div/div[1]/div/div/h4/a").text
    email = dealer.find_elements(By.XPATH, '/html/body/div[4]/div/div[3]/div/div[2]/div/div/div[3]/a').text
    phone = dealer.find_elements(By.XPATH, '/html/body/div[4]/div/div[3]/div/div[2]/div/div/div[2]/a').text
    print(name,email,phone)

Any ideias?

Thanks!

CodePudding user response:

find_elements method returns a list object. you can iterate on list object to get all the elements you need.

for n in name: print(n.text)

CodePudding user response:

In your code, dealers returns a list of WebElements, so you can use find_elements. But in for loop - dealer returns only one WebElement per iteration, so you have to use find_element

dealers = driver.find_elements(By.XPATH, '/html/body/div[4]/div/div[3]/div/div[1]') 

for dealer in dealers:
    # you should use 'find_element' for name, email and phone
    name = dealer.find_element(By.XPATH, "/html/body/div[4]/div/div[3]/div/div[1]/div/div/h4/a").text
    email = dealer.find_element(By.XPATH, '/html/body/div[4]/div/div[3]/div/div[2]/div/div/div[3]/a').text
    phone = dealer.find_element(By.XPATH, '/html/body/div[4]/div/div[3]/div/div[2]/div/div/div[2]/a').text
    print(name,email,phone)
  • Related