1

mechanize を使用してファイルからサイトのフォームにテキストを送信しようとしていますが、コピーして貼り付けると、次のようにテキストがうまく表示されません。

                                   ████                                     
                                  █⌡⌡⌡⌡████                                 
                                 █⌡⌡⌡⌡⌡⌡⌡⌡⌡█████                            
                                █⌡⌡⌡⌡⌡████⌡⌡⌡⌡⌡⌡████                        
                                █⌡⌡⌡██    ██⌡⌡⌡⌡⌡⌡⌡⌡█████                   
                               █⌡⌡⌡⌡█      █⌡⌡⌡⌡██⌡⌡⌡⌡⌡⌡⌡████

コードPythonを使用すると、次のようになります。

                              ����                                     
                              ���������                                 
                             ���������������                            
                            ��������������������                        
                            ������    ���������������                   
                           ������      ������������������               
        �����             ������        ���������������������           
    �������������        ��������      ���������������������������      

おそらくエンコーディングに関するもので、機能させることはできません。元のファイル textfile.txt のエンコーディングは OEM-US で、これをググると cp437 です。

def functionaa(linksite, text):
    import mechanize 
    import cookielib
    # Browser 
    br = mechanize.Browser()
    # Cookie Jar
    cj = cookielib.LWPCookieJar() 
    br.set_cookiejar(cj) 
    # Browser options 
    br.set_handle_equiv(True) 
    br.set_handle_gzip(True) 
    br.set_handle_redirect(True) 
    br.set_handle_referer(True) 
    br.set_handle_robots(False) 
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 
    edit = br.open(link)
    html1 = edit.read()
    br.select_form(nr=0) 
    br.form['textcode'] = "[pre]%s[/pre]" % text
    br.submit() 

f=open(r'E:\ABC\textfile.txt', 'r')
content = f.read()
functionaa("http://site.com", content)
4

2 に答える 2

1

ええ、機械化に問題があるようです。CMDでは、ユニコードなしで、このように好きなように印刷できます..

content = file.read()
print content

しかし、mecanize で送信すると、サイト上では同じではありません。

無視フラグを使用すると、テキスト以外はすべてスキップされます。エラーは、ASCIIはそれらの文字をエンコードできません..

于 2013-03-11T02:27:25.363 に答える
0

ユーザーが手動でテキスト コントロールに入力したかのように、ファイルの内容のみをアップロードする場合は、最初に、処理エージェントが想定する文字セットが奇妙な文字を表すことができることを確認する必要があります。その場合は、ステップ 2 に進み、次の方法でファイルの内容をネイティブ Python 文字列で読み取ることができます。

file = open(filename, 'rb')
content = unicode(file.read(), 'cp437')
file.close()
# Now use "content" to fill the form

代わりに、これはファイルをアップロードする方法です。

def upload(action, filename):
  br = mechanize.Browser()
  br.form.add_file(open(filename, 'rb'), 'text/plain; charset=cp437', filename)
  # Do your work...
  br.submit()

ファイルをバイナリ モードで開いたので、そのバイトには変換が適用されないことに注意してください。また、想定されるエンコーディングを MIME タイプで指定したことにも注意してください。これで、トランスコーディング (存在する場合) を処理するのはサーバー コードに任されます。

于 2013-03-10T16:55:43.210 に答える