![](/img/trans.png)
[英].CSV wrong characters: Changing encoding to UTF-8 pandas / python
[英]Python, Selenium, CSV, and UTF-8 (French) characters
我有一个包含法语单词(例如“immédiatement”)的CSV文件。 我正在使用Python和Selenium Webdriver将这些单词写入文本字段。 基本上,使用必需的Selenium软件包和csv:
问题:
“ UnicodeDecodeError:'utf8'编解码器无法解码位置3的字节0x82:无效的起始字节”
我试过了:
没爱。
(我无法将其设置为“忽略”或“替换”,因为我需要实际输入该单词。它似乎不是Selenium本身,因为当我将列表直接放在脚本中时,键入就可以了(我可以将其作为脚本中的字典输入,但是耶稣, 为什么 。)
我想念什么?
[编辑]样本CSV内容:
3351,Payé/Effectué,Link1
45922,Plannifié,Link1
3693,Honoraires par Produit,Link2
和通用代码:
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import unittest, time, re, csv
csvdoc = "C:\path\to\sample.csv"
class Translations(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "https://baseURL.com/"
self.verificationErrors = []
self.accept_next_alert = True
def test_translations(self):
driver = self.driver
driver.get(self.base_url + "login")
driver.find_element_by_id("txtUsername").clear()
driver.find_element_by_id("txtUsername").send_keys("username")
driver.find_element_by_id("txtPassword").clear()
driver.find_element_by_id("txtPassword").send_keys("password")
driver.find_element_by_id("btnSubmit").click()
# Navigate to the correct area.
# - code goes here -
# Open the file and get started.
with open(csvdoc, 'r') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in csvreader:
elmID = row[0]
phrase = row[1]
arealink = row[2]
driver.find_element_by_xpath("//a[text()='%s']" % arealink).click()
time.sleep(1)
driver.find_element_by_id(elmID).clear()
driver.find_element_by_id(elmID).send_keys(phrase)
driver.find_element_by_id("btnSavePhrase").click()
def is_element_present(self, how, what):
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException, e: return False
return True
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
经过几个小时的尝试,我找到了一种方法,但是我不得不完全离开csv.reader。 您面临的问题是经典的python字节字符串vs unicode字符串问题。 我还不太熟练使用python unicode和字节字符串,并且csv.reader在后台使用了某种我无法弄清楚的编码。 然而:
from selenium.webdriver.chrome.webdriver import WebDriver
import io
csvdoc = "your_path/file.csv"
driver = WebDriver("your_path/chromedriver.exe")
driver.get("http://google.com")
element = driver.find_element_by_id("lst-ib")
with io.open(csvdoc, 'r') as csvfile:
csvcontent = csvfile.read()
print(csvcontent)
for l in csvcontent.splitlines():
line = l.split(',')
element.send_keys(line[0])
element.send_keys(line[1])
element.send_keys(line[2])
当我选择不使用csv.reader
来获取文件的内容时,便能够使用可预测的String。 然后,只需将其拆分成正确的循环即可。 最后,我的字符串被硒send_keys()
方法接受。
我也将open() as
更改为io.open() as
。 最初这是为了能够将编码值作为第三个参数(我正在使用python 2.7)。 当我删除第三个参数时,脚本仍然有效,但是删除了io.
不工作。
我知道这是解决您的问题的原始方法,但至少可以奏效,目前,这是唯一的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.