0

私は、Webページから異なるトラック名を解析するために、Pythonでセレントと組み合わせてスクリプトを書いています。私のスクリプトは正常に動作しています。私はprint文でtry n breakを使用して目的の結果を得ました。 try-break式を避けるために1つのライナー印刷ステートメントがありますか?最後に、同じセレクタをスクリプトで2回使用しました.1つは場所を見つけるため、もう1つは同じものを選択するためです。この冗長性を揺るがすことは可能でしょうか?ここでpython + seleniumスクリプトから冗長を振り払います

はスクリプトです:行を減らすために

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() 
driver.get("https://www.shazam.com/charts/top-100/united-states") 
wait = WebDriverWait(driver, 10) 

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.grid-vert-center"))) # This selector and the following one are identical so I wished to shake off the verbosity by using once 
for item in driver.find_elements_by_css_selector("div.grid-vert-center"): 
    try: 
     track = item.find_element_by_css_selector('div.title a.ellip').text 
    except Exception: 
     track = "" 
    print(track) 

driver.quit() 

答えて

1

は、あなたがあなたの

for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.grid-vert-center"))): 

EC.presence_of_all_elements_locatedとして戻ってあなたが使用できるリストを

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.grid-vert-center"))) # This selector and the following one are identical so I wished to shake off the verbosity by using once 
for item in driver.find_elements_by_css_selector("div.grid-vert-center"): 

を置き換えることができます番号を付けます繰り返し。 try/exceptについては

...あなたが代わりに

tracks = [track for track in item.find_elements_by_css_selector('div.title a.ellip')] 
if tracks: 
    print(tracks[0].text) 

P.S.の下に使用することができますコードが正常に機能していて、改善が必要な場合は、StackOverflowの代わりにCode Reviewを使用してください。

+0

お返事ありがとうございます。私の主な関心事は、私が上で行ったスクリプトで同じことを何度も使わないことに関する回避策を設けることでした。あなたの解決策は私が後にしたものです。再度、感謝します。 – SIM

関連する問題