我只是制作一个简单的脚本,转到房地产列表的网页点击列表上的内容,打开代理网站,打印出URL,然后关闭页面并返回列表页面继续下一个列表。我已经碰到了一堵墙,但是在一些列表中代理商没有网站,所以我收到一个错误,说剧本无法找到该元素,因为它不存在脚本停止的情况。我怎么能在for循环中使用if-else语句来关闭没有代理网站的已打开的列表并返回到列表页面继续检查下一个列表?
这是循环:
time.sleep(15)
for i in range(1,9):
listing_page = driver.find_element_by_xpath('//*[@id="m_property_lst_cnt_realtor_more_'+str(i)+'"]').click()
realtor_url = driver.find_element_by_xpath('//*[@id="lblMediaLinks"]/a').click()
WebDriverWait(driver, 10).until(lambda d: len(driver.window_handles) == 2)
driver.switch_to_window(driver.window_handles[1])
WebDriverWait(driver, 10)
print(driver.current_url)
driver.close()
driver.switch_to_window(driver.window_handles[0])
driver.get(home_page)
time.sleep(10)
(PS,我知道sleep()是不好的做法。我只关注基本的"如何让脚本工作"而不是更好的构建方式。一旦完成,我就完成了可以学习如何做到更好)
答案 0 :(得分:0)
除了提供错误的代码外,您可以尝试使用try。试试这个,看它是否有效:
time.sleep(15)
for i in range(1,9):
listing_page = driver.find_element_by_xpath('//*[@id="m_property_lst_cnt_realtor_more_'+str(i)+'"]').click()
try:
realtor_url = driver.find_element_by_xpath('//*[@id="lblMediaLinks"]/a').click()
WebDriverWait(driver, 10).until(lambda d: len(driver.window_handles) == 2)
driver.switch_to_window(driver.window_handles[1])
WebDriverWait(driver, 10)
print(driver.current_url)
except:
print('No URL Found')
driver.close()
driver.switch_to_window(driver.window_handles[0])
driver.get(home_page)
time.sleep(10)
答案 1 :(得分:0)
您可以使用try-except:
,而不是使用if-else time.sleep(15)
for i in range(1,9):
listing_page = driver.find_element_by_xpath('//*[@id="m_property_lst_cnt_realtor_more_'+str(i)+'"]').click()
try:
realtor_url = driver.find_element_by_xpath('//*[@id="lblMediaLinks"]/a').click()
WebDriverWait(driver, 10).until(lambda d: len(driver.window_handles) == 2)
driver.switch_to_window(driver.window_handles[1])
WebDriverWait(driver, 10)
except:
print("Not found")
continue
driver.close()
driver.switch_to_window(driver.window_handles[0])
driver.get(home_page)
time.sleep(10)
不应抛出错误并停止,而应跳过代码的这一部分并按预期继续。