2017-08-06 62 views
0

我已經用python和selenium一起編寫了一個腳本來解析網頁中的不同曲目名稱。我的腳本工作得很好。我在打印語句中使用了try n來獲得所需的結果。是否有任何一個班輪印刷聲明可以避免嘗試表達?最後,我在腳本中使用了相同的選擇器兩次 - 一次用於查找位置,另一次用於選擇相同的選擇。是否有可能擺脫這種冗餘?擺脫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

爲了減少線的數目可以更換

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"): 

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

EC.presence_of_all_elements_located回報你,你可以使用一個列表迭代。

至於try/except ...您可以使用以下代替

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

附:請注意,如果您的代碼運行良好,但您正在尋找一些改進,則應該使用Code Review而不是StackOverflow

+0

謝謝先生安德森,您的回答。我主要關心的是,在我上面所做的腳本中,不要多次使用相同的東西。你的解決方案就是我所追求的。再次感謝。 – SIM