Selenium WebDriver写入CSV文件时出现意外结果

时间:2018-07-27 08:25:41

标签: python selenium mozilla geckodriver

我正在尝试通过Python中的Selenium WebDriver将一些数据写入CSV文件中

am使用Geckodriver v0.21.0Mozilla v61.0.1

这是我的代码

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

但是我的CSV文件中出现了Wired结果

"<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}"")>"

我想念什么?

2 个答案:

答案 0 :(得分:1)

您正在尝试将webElement写入csv文件

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

WebElement只会是这样。如果您想编写显示在该元素上的文本,请使用如下所示的java中的gettext

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

根据您的代码,如下所示

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

然后将数据添加到csv文件

答案 1 :(得分:1)

@murali硒是正确的,您需要先从元素中提取文本,然后再写入文件。

您需要在try块中执行以下操作:

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

您正在使用writerows,所以您不需要for label in labels:,尤其是因为您甚至在循环中甚至没有使用label