2017-08-06 53 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