2016-10-10 13 views
1

次のサイトからデータをスクラップする際に問題が発生しました:https://arcc.sdcounty.ca.gov/Pages/Assessors-Roll-Tax.aspxPython Selenium Webpage Scrapingドロップダウンの選択とhtml形式のテキストの入力

私がためにこれらのステップを実行する必要があります。

  1. テキストフィールド(すなわち43ハダル博士)に住所を入力しますオプション「住所

  2. ドロップダウンを選択し

  3. '送信' ボタンをクリックします。

をclickinた後、 g提出するには、特定の住所のAPN番号を持つページに移動する必要があります。

問題: 私は上記の手順を実行できます。ただし、ドロップダウンオプションを選択してテキストボックスに入力アドレスを入力すると、ドロップダウンオプションを選択したときにのみ「送信」をクリックする前に何らかの理由でテキストボックスの入力アドレスがクリアされるため、失敗します。

私はドロップダウンオプションを選択した後、Selenium's Expected Conditionsを使ってテキストボックスの入力をトリガしようとしましたが、何もしませんでした。私はこの問題がある理由と解決策に関するアドバイスを特定するための助けを求めています。

ありがとうございます。

マイコード:これはあなたの状況であれば

driver = webdriver.Chrome() 
    driver.get('https://arcc.sdcounty.ca.gov/Pages/Assessors-Roll-Tax.aspx') 
    #Selects drop down option ('Street Address') 
    mySelect =  Select(driver.find_element_by_id("ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25 ea12_ctl00_ddlSearch")) 
    my=mySelect.select_by_value('0') 
    wait = WebDriverWait(driver,300) 
    #Enter address in text box to left of drop down 
    driver.find_element_by_id("ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12_ct l00_txtSearch").send_keys("11493 hadar dr") 
    #Click 'Submit' button to return API numbers associated with address 
    driver.find_element_by_id("ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12_ctl00_btnSearch").click() 
    driver.quit() 
+0

、それがドロップダウンを選択し、テキストボックスにするとき、私は手動で入力したアドレスよりも重要であるかもしれない、テキストボックスが自動的に手動でドロップダウン値を選択してテキストボックスに入力アドレスを手動で入力するとクリアされませんが、私のコードでは最初にドロップダウン値を選択してから、テキストボックスにアドレスを入力します。 –

+0

'send_keys(" 11493 hadar dr \ n ")'を試してください。 –

答えて

0

わかりません。しかし、あなたの質問から飛び出したのは、テキストボックスの入力です...ウェブサイトのテキストボックスに入力すると、テキストがはっきりと見えても、実際にテキストボックスメソッドでテキストが読み取られることはありませんフォーカス(カーソル)がクリックされたり、タブアウトされてテキストボックスから離れたりします。

テキスト入力ボックスのテキストカーソルを「submit submit」の前にタブで移動すると、この問題が解決されることがよくあります。

+0

OK、あなたのアドバイスを適用し、私は次のように私のコードを調整する:。。driver.find_element_by_id( "ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12_ctl00_txtSearch")send_keys( "11493ハダルのDR") driver.find_element_by_id( "ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12_ctl00_txtSearch")send_keys(Keys.TAB) ドライバ.find_element_by_id( "ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12_ctl00_btnSearch")。click() –

+0

しかし、これで残念なことに問題は解決されませんでした。 –

1

コード内でいくつか変更して機能させました。 (...)find_element_by_nameする

mySelect = Select(driver.find_element_by_id("ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25 ea12_ctl00_ddlSearch")) 

mySelect = Select(driver.find_element_by_name("ctl00$ctl43$g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12$ctl00$ddlSearch")) 

そして

my=mySelect.select_by_value('0') 

をselect_by_visible_textするには( '...'):

my = mySelect.select_by_visible_text("Street Address") 

driver.find_element_by_id("ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12_ct l00_txtSearch").send_keys("11493 hadar dr") 

find_element_by_xpath(...)には、通常、xpathで要素を見つけるときに良い結果が得られるためです。

driver.find_element_by_xpath('//*[@id="ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12_ctl00_txtSearch"]').send_keys("11493 hadar dr") 

すべてがどのように見えるかこれはされています。また

from selenium.webdriver.support.ui import WebDriverWait 
from selenium import webdriver 
from selenium.webdriver.support.ui import Select 

driver = webdriver.Chrome() 
driver.get('https://arcc.sdcounty.ca.gov/Pages/Assessors-Roll-Tax.aspx') 

#Selects drop down option ('Street Address') 
mySelect = Select(driver.find_element_by_name("ctl00$ctl43$g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12$ctl00$ddlSearch")) 
my = mySelect.select_by_visible_text("Street Address") 

wait = WebDriverWait(driver,300) 

#Enter address in text box to left of drop down 
driver.find_element_by_xpath('//*[@id="ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12_ctl00_txtSearch"]').send_keys("11493 hadar dr") 

#Click 'Submit' button to return API numbers associated with address 
driver.find_element_by_id("ctl00_ctl43_g_d30f33ca_a5a7_4f69_bb21_cd4abc25ea12_ctl00_btnSearch").click() 

driver.quit() 
+0

これはあなたのためにできましたか?あなたのコードを使用して、私は同じ結果を得て、修正は行われていないようです。これがあなたのコンピュータでうまくいけば、それは私のコンピュータ上で動作しない何らかの理由を知っていますか?あなたの助けをありがとう! –

+0

コードを実行しているときに私の画面のYouTubeビデオを作成しました。あなたのコードが自分のコンピュータ上で何をしているのか、そしてどのように失敗するのかを見ることができます。 httft://www.youtube.com/watch?v=MVTZwOKhXeE&feature=youtu.be –

+0

タイミングだけで、ドライバはテキストがテキストフィールドに入力される前に検索をクリックします。あなたが次のものを加えることができれば、タイミングについてすべてを確認することができます。 raw_input( "Enterを押し続ける") ドロップダウンを選択してから数秒待ってからenterを押して、send_keys()の後ろに追加してこの行を追加します。テキストフィールドに入力したテキストが表示されるまで待ってから、Enterキーを押して問題なく動作するようにします。 –

関連する問題