Python Selenium UnicodeEncodeError

时间:2016-01-23 23:25:59

标签: python python-3.x selenium

我总是在PyCharm中编写并运行我的程序,但是当我在常规python中打开它时它会给我这个错误..(它在pycharm中工作)

from selenium import webdriver
import time
import random

print("\n")
user_input = input("Username: ")

##########################################################
path = r"C:\Users\John\Desktop\chromedriver.exe"
driver = webdriver.Chrome(path)
##########################################################

text_file = open(user_input +  str(random.random()) + ".txt", "w")
text_file.write("GoogleSearch:\n\n")
##########################################################
print("Google results:\n")
driver.get("https://www.google.com/#q=" + user_input)
for n in range(20):
    try:
        driver.find_element_by_xpath("""//*[@id="pnnext"]/span[2]""").click()
    except: print("out of pages")
    pass
    time.sleep(2)
    posts2 = driver.find_elements_by_class_name("_Rm")
    for post2 in posts2:
        print(post2.text)
        text_file.write(post2.text + "\n\n")


print("\n")
print("Pipl results:\n\n")
text_file.write("\n\n")
text_file.write("Pipl results:\n\n")
driver.get("https://pipl.com/search/?q=" + user_input + "&l=&sloc=&in=5")
posts1 = driver.find_elements_by_class_name("line1")
for post1 in posts1:
    print(post1.text)
    text_file.write(post1.text + "\n")

time.sleep(1)
driver.close()
Traceback (most recent call last):
  File "C:\Users\John\Desktop\peopleSearchTool.py", line 32, in <module>
    print(post2.text)
  File "C:\Users\John\AppData\Local\Programs\Python\Python35-32\lib\encodings\cp437.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u203a' in position 23: character maps to <undefined>

1 个答案:

答案 0 :(得分:0)

问题的根源很可能是代码页。 PyCharm在带有Unicode代码页的控制台中运行程序,而独立运行显然可以在带有代码页437(存在于20世纪80年代)的控制台中运行。 Unicode代码页包含一个代码为#203a的字符,但代码页437不包含,因为它只包含256个字符。

因此,为了打印包含代码高于FF的字符的字符串,您必须对字符串进行编码/解码或更改控制台代码页。 但请注意,这两种方法都会带来很多问题。

更好的选择就是坚持使用Unicode,永远不会打印到非Unicode控制台。