2016-05-02 6 views
2

ウェブページから一部のテキストを削り取ろうとしています。私のウェブページには、表示されている単語のリストがあります。 「+その他」をクリックすると表示されるものもあれば、表示されるものもあります。一度クリックすると、単語のリストは常に同じです(同じ単語の同じ単語)。しかし、一部は太字で削除されています。基本的にデータベースの各項目にはいくつかの機能があります。私は何をしたいのですか:それぞれの項目について、どの機能が利用可能かどうかを教えてください。私の問題は、「+その他」ボタンを克服することです。隠されたテキストをウェブページから掻き出す方法は?

私のスクリプトは、表示されている単語に対してのみうまく動作し、「+その他」によって隠されている単語に対してはうまく動作しません。私がしようとしているのは、ノード "del"の下に続くすべての単語を集めることです。私は当初、要素を検査クロムに表示されるlxmlのを通じて、ウェブページがロードされているだろうと思って、私はそれに応じて自分のコードを書いた:

from lxml import html 

tree = html.fromstring(br.open(current_url).get_data()) 

mydata={} 

if len(tree.xpath('//del[text()='some text']')) > 0: 
    mydata['some text'] = 'text is deleted from the web page!' 
else: 
    mydata['some text'] = 'text is not deleted' 

私が収集できるか、このコードを実行するたびに、実際にデータの一部でありますウェブページには表示されますが、「+その他」をクリックした後に表示される単語の完全なリストは表示されません。

私はセレンを試していましたが、私が理解する限り、それは解析するためのものではなく、ウェブページとやり取りすることを意図しています。しかし、これを実行した場合:

from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get('https://www.mywebpage.co.uk') 

a = driver.find_element_by_xpath('//del[text()="some text"]') 

私はこの要素またはエラーを取得します。私は私が行うことができるように、空のリストを取得したいと思います:

mydata = {} 

if len(driver.find_element_by_xpath('//del[text()="some text"]')) > 0: 
    mydata['some text'] = 'text is deleted from the web page!' 
else: 
    mydata['some text'] = 'text is not deleted' 

やスクリプトで撮影し、これらの「隠れた」要素を取得するための別の方法を見つけます。

私の質問は誰もこのタイプの問題を抱えていますか?彼らはどのようにそれを整理しましたか?

答えて

0

私が正しく理解している場合は、リスト内の要素を探したいと思います。しかし、要素をリストを返す代わりにページ上で利用できない場合、SeleniumはElementNotFoundExceptionをスローします。

私が持っている質問はなぜリストが欲しいのですか?あなたの例で判断すると、要素がページに存在するかどうかを見たいと思っています。あなたはtry/exceptを使って簡単にこれを達成することができます。

from selenium.common.exceptions import TimeoutException 

try: 
    driver.find_element_by_xpath('//del[text()="some text"]') 
    mydata['some text'] = 'text is deleted from the web page!' 
except TimeOutException: 
    mydata['some text'] = 'text is not deleted' 

本当に本当にこのリストが必要な場合は、複数の要素のページを検索できます。これは、リスト内のロケータと一致するすべての要素を返します。 が、これは置き換えを行うには:

driver.find_elements_by_xpath('//del[text()="some text"]') 
+0

こんにちは@RemcoW:

driver.find_element_by_xpath('//del[text()="some text"]') 

(要素)で。答えをありがとう。はい、私のウェブページには、表示されている単語のリストがあります。 「+その他」をクリックすると表示されるものもあれば、表示されるものもあります。一度クリックすると、単語のリストは常に同じです(同じ単語の同じ単語)。しかし、一部は太字で削除されています。基本的にデータベースの各項目にはいくつかの機能があります。私は何をしたいのですか:それぞれの項目について、どの機能が利用可能かどうかを教えてください。私の問題は、「+その他」ボタンを克服することです。 – user0978189

+0

私のスクリプトは、表示されている単語に対してのみうまく動作し、「+その他」によって隠されている単語に対しては機能しません。あなたのコードを試してみましょう。セレンで私の恐怖は、それが非常に遅く見えるということです... – user0978189

+0

それは単にウェブページを開き、私の辞書のデータを保存しません。; – user0978189

関連する問題