Sumithran
Sumithran

Reputation: 6565

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?

Upvotes: 0

Views: 576

Answers (2)

T. Ray
T. Ray

Reputation: 641

@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.

Upvotes: 1

murali selenium
murali selenium

Reputation: 3927

you are trying to write webElement into csv file

   labels = browser.find_elements_by_xpath('.//a[@class="question-hyperlink"]')

WebElement will be like that only. if you want to write text displaying at that element then go for gettext, in java like below

   driver.findElement(By.name("btnI")).getText()

As per your code, it looks like below

for label in labels:
   data.append(label.gettext()) //i am just giving hint, syntax may not correct.

then add data to csv file

Upvotes: 1

Related Questions