2016-08-30 15 views
0

以下のコードを実行して、Unicodeアラビア文字を含む要素を検索しています。 XXXを英字に置き換えた場合、以下のコードはうまく動作しますが、アラビア語の文字に置き換えてもそれはできません。ユニコード/アラビア文字を含む要素を検索するにはどうすればよいですか?

私はhtmlページをチェックして、 "< meta charset =" utf-8 ">"という文字を設定していますので、最初の行のPyスクリプトに文字セットを設定して、働いていない。

何か手掛かりがあります。

おかげ

# coding=UTF8 

from selenium import webdriver 
# create a new Firefox session 
driver = webdriver.Firefox() 
driver.implicitly_wait(10) 
driver.get("http://www.norikoptic.com/Product/Women") 
print driver.find_element_by_xpath(u"//*[contains(text(), 'XXX')]").text 
+0

これはアラビア語の1文字では機能しませんか?多分右から左への対左から右へのテキストの混乱があるかもしれません。あなたはアラビア文字の部分を逆にしようとしましたか? – janbrohl

答えて

0

私はユニコードを使用した後に変更されて、私は、そのアラビア語に対応するUnicodeを得るために一つのノードを選択した初 がここIpythonでデモをチェック

、あなたは、XPathで正しいUnicodeを使用していないと思いますxpathは次のように出力されます。

In [1]: response.xpath('//li[@class="lensItem"]/a/text()').extract() 
Out[1]: [u'\u0639\u062f\u0633\u06cc'] 

In [2]: response.xpath(u'//a[contains(text(), "\u0639\u062f\u0633\u06cc")]/text()').extract() 
Out[2]: 
[u'\u0639\u062f\u0633\u06cc', 
u'\u0639\u062f\u0633\u06cc', 
u'\u0645\u0634\u062e\u0635\u0627\u062a \u0639\u062f\u0633\u06cc \u0622\u0641\u062a\u0627\u0628\u06cc'] 

In [3]: a = response.xpath(u'//a[contains(text(), "\u0639\u062f\u0633\u06cc")]/text()').extract() 

In [4]: for i in a: 
    ...:  print i 
    ...: 
عدسی 
عدسی 
مشخصات عدسی آفتابی 

編集

私はScrapyを使用してXPathをテストしてきたが、これもseleniumで動作します、

In [6]: driver.find_element_by_xpath(u'//a[contains(text(), "\u0639\u062f\u0633\u06cc")]').text 
Out[6]: u'\u0639\u062f\u0633\u06cc' 

私はこれがあなたの問題を解決するために役立つことを願っています。

+0

に文字マップ...面白い.... "レスポンス"とは何ですか? – user1941390

+0

もデモを見つけることができません... ?? – user1941390

+0

@ user1941390:今すぐ回答を編集しました – Jithin

0

はそれがうまくいくなど優れ、プロパティファイルなどの外部ファイルシステムから(「XXX」の交換)containsでチェックするテキストを渡して試してみてください。

ホエイあなたが与えた例であなたのxパスの前に 'u'がありますか?

+0

入力ファイルを使用し、エンコーディングをutf8に設定することを意味しますか?あなたはもっと具体的になりますか?また、u'lablabla ..はユニコード( 'lablabla ..')の略です。 – user1941390

+0

代わりに相対xpathを使用しようとすると、要素のテキストを読み込もうとすると、次のエラーメッセージが表示されます。 'charmap'コーデックでは、次のようなエラーメッセージが表示されます: 'charmap'コーデックは、 0〜4の位置に文字をエンコードする: user1941390

関連する問題