Search code examples
pythonseleniummozillageckodriver

Selenium WebDriver Unexpected result while writing to CSV file


I am trying to Write some data into a CSV file via Selenium WebDriver in Python

am using Geckodriver v0.21.0 and Mozilla v61.0.1

Here is my code

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.common.exceptions import NoSuchElementException
import csv
import traceback


cap = DesiredCapabilities().FIREFOX
cap["marionette"] = False
browser = webdriver.Firefox(capabilities=cap, executable_path="C:\\usr\local\bin\geckodriver.exe")
browser.get('https://stackoverflow.com/questions?pagesize=10')
data = []
while True:
    try:
        elm = browser.find_element_by_link_text("next")
        browser.execute_script("return arguments[0].scrollIntoView();", elm)
        elm.click()
        labels = browser.find_elements_by_xpath('.//a[@class="question-hyperlink"]')
        data.append(labels)
        for label in labels:
            with open('output.csv', 'wb') as data_file:
                writer = csv.writer(data_file)
                writer.writerows(data)
    except NoSuchElementException:
        print(traceback.format_exc())
        break

But am getting a Wired result in my CSV file

"<selenium.webdriver.firefox.webelement.FirefoxWebElement (session=""f45d368b-462d-46b6-b9f5-c28392cdc2eb"", element=""{38980652-52c8-472b-a8a0-3e7909247bd4}"")>","<selenium.webdriver.firefox.webelement.FirefoxWebElement (session=""f45d368b-462d-46b6-b9f5-c28392cdc2eb"", element=""{c1c746e1-58d2-42ec-972f-d35993062200}"")>"

What i am Missing?


Solution

  • @murali selenium is correct, you need to extract the text from elements before you write to file.

    You'll need to do something like this in your try block:

    try:
        elm = browser.find_element_by_link_text("next")
        browser.execute_script("return arguments[0].scrollIntoView();", elm)
        elm.click()
    
        labels = browser.find_elements_by_xpath('.//a[@class="question-hyperlink"]')
        text = [x.text for x in labels]
        data.append(text)
    
        with open('output.csv', 'w') as data_file:
            writer = csv.writer(data_file)
            writer.writerows(data)
    
    except NoSuchElementException:
        print(traceback.format_exc())
        break
    

    You're using writerows so you don't need for label in labels:, especially since you're not even using label in the loop.