Reputation: 6565
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
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
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