1

私は、Webページからいくつかの情報を解析するために、Pythonでセレントと組み合わせてスクリプトを書いています。そのウェブページ上のリンクには店舗名がほとんどありません。いずれかのリンクをクリックすると、ボックスのようなカードが情報を含むポップアップ表示されます。私の意図は、各リンクをクリックし、そのカードから情報を解析することです。しかし、スクリプトを実行すると、timeout exceptionというエラーがスローされます。私はブラウザをスクロールして、リンクがクリックできない時間が原因であるかどうかを確かめるために、要素が配置されている位置までスクロールしました。ただし、同じエラーが発生します。どのように私はそれを回避することができますか?前もって感謝します。いくつかの非常にレイアウトされたリンクを扱うことができません

これは、そのWebページへのリンクである:ここではPage Link

は私の試みです:リンクが存在する内

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Chrome() 
wait = WebDriverWait(driver, 10) 
driver.get("above_link") 

for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "#addresses_list li a"))): 
    item.click 
driver.quit() 

要素:

<li style="list-style:none; background-image:url(&quot;https://storelocator.w3apps.co/images/orange.png&quot;); background-repeat:no-repeat; background-position:0px 10px; padding:10px; padding-left:35px; border-bottom:1px dashed #ddd;" onmouseover="hoverStart(601538)" onmouseout="hoverStop(601538)"><a href="#" onclick="focus_and_popup(601538); return false;"><div class="gm_add_name">Adel Outfitters</div>1221 W 4th St <br>Adel Georgia 31620<br><div style="display:none" class="w3-address-country">United States</div>229-896-7105</a><div class="gm_add_distance"></div><a target="_blank" class="directions-link" href="http://maps.google.com/?saddr=+&amp;daddr=1221+W 4th St, Adel, Georgia, 31620">Directions<span class="w3-arrow">➲</span></a></li> 

リンクが左側に位置していますマップのサイドエリア。

+1

リンクはiframe内にあります(#store-locator-iframe)。そのiframeを最初に切り替えます。また、ポップアップの内容を読むときには、適切なものがアクティブになるのを待つためにいくつかのロジックを入れる必要があります。 – Grasshopper

答えて

1

@Grasshopperは、リンクを処理できるように、iframeに切り替える必要があることを正しく示唆しました。試す

driver.switch_to.frame("store-locator-iframe") 
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "#addresses_list li a"))): 
    driver.execute_script('arguments[0].scrollIntoView();', item) 
    item.click() 
    ... 

# Switch back if you need to handle elements outside of iframe 
driver.switch_to.default_content() 
+0

あなたの提案は決して失敗しません。私はスクリプトが正常に各リンクをクリックしていることを視覚化したが、私はなぜ情報を持つボックスは各クリックでポップアップしないのだろうか?この時点で私が実行すべきさらなる活動はありますか? – SIM

+1

申し訳ありません、私は正確にクリックイベントを実行するのを忘れていました。私はあなたがスクリプトの提案された部分で 'click'を' click() 'に変更すべきだと思います。ありがとうございました。 – SIM

+0

ああ、うんち:)あなたは右だ – Andersson

関連する問題