2016-10-16 9 views
0

Im 셀레늄 놈입니다. 파이썬으로 일을 처리하는 데 어려움을 겪고 있습니다. 이 페이지 임은 다른 요소 루프의 각 시간을 선택하지만 계속해서 또 다시 같은 요소를 인쇄하더라도 https://www.tripadvisor.com/Airline_Review-d8729164-Reviews-Cheap-Flights-or560-TAP-Portugal#REVIEWS셀레늄 파이썬의 요소를 반복 할 수 없습니다

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

driver = webdriver.Chrome("C:\Users\shalini\Downloads\chromedriver_win32\chromedriver.exe") 
driver.maximize_window() 
url="https://www.tripadvisor.com/Airline_Review-d8729164-Reviews-Cheap-Flights-or560-TAP-Portugal#REVIEWS" 
driver.get(url) 

for i in driver.find_elements_by_xpath("//div[@class='wrap']"): 
    print i.find_element(By.XPATH, '//p[@class="partial_entry"]') 
     print i.text 
    print "==============================================" 
    # THIS IF BLOCK IS NECESSARY, I CANT DO AWAY WITH THIS ONE 
    if i.find_elements(By.CSS_SELECTOR,"#REVIEWS .googleTranslation>.link"): 
     print "======YES TRANSLATION AVAILABLE========" 

에서 모든 사용자 리뷰 ("partial_entry"클래스)을 반복하려고 임.

====== 편집 ========= (이 경우도 블록 I 블록 & 멀리 그것으로 수행하지 못할 경우 마지막 유지하기 위해, 그래서 어떤 솔루션이 포함해야 할) ==========

심지어 작동하지 않습니다 (실제로 작동해야 함, http://selenium-python.readthedocs.io/locating-elements.html에 따라). 나는 셀레늄과 함께 계속하고있는 what 's를 모른다! !!!!

print i.find_element(By.CSS_SELECTOR, 'p.partial_entry') 

출력 :

NoSuchElementException: 
+0

질문이 명확하지 않습니다. 어떤 클래스, 속성 등으로 요소를 반복하면 정확히 무엇을하려고하는지 전혀 알 수 없습니다. 당신은 같은 말을 할 수 있습니다, 내가 반복하고 모든 4 성급 리뷰를 인쇄하거나 모든 제안 링크를 클릭 노력하고있어 – testerjoe2

+0

@ testerjoe2 내가 코드를 실행하고 모든 사용자 리뷰 ("partial_entry"클래스) – shalini

+1

인쇄하려고 이런 elemnts을 prininting ..... 2016년 2월 1일 검토 Andre_Barbosa_83 조아 페소, PB = ================================= 자사의 다른 리뷰 리뷰 예상대로 .. 무엇을 인쇄하고 싶습니다 – thebadguy

답변

3

1 2 루프에서 i.find_element(By.XPATH, '//p[@class="partial_entry"]') 반복하는 동안 반복적으로 첫 번째 요소가 계속 그 이유는 그 루트에서 요소를 찾으려고 // 시작/이 아닌은 하위 요소로 i입니다. 따라서 외부 루프의 각 반복에 대해 첫 번째 p.partial_entry 요소를 계속 반환합니다.

i의 자손 요소를 검색하려면 p[@class="partial_entry"]과 일치해야하며 xpath는 .//으로 시작해야합니다. 그것이 점이하는 것입니다. 라인 print i.find_element(By.CSS_SELECTOR, 'p.partial_entry')를 들어

2 :
단일 find_element 중 하나를 먼저 발견 요소를 반환하거나 아무 것도 발견되지 않으면 오류가 발생. 하위 요소가없는 div.wrap이 있으므로 NoSuchElementException이됩니다.

find_elements ('s'참고) 메소드는 요소 목록을 반환하고 오류가없는 경우 빈 목록을 반환합니다.

그래서 모든 것을 함께 넣어 : find_element(By.XPATH, '...')과 함께 find_elements_by_xpath('...') 같은

Btw는
>>> for i in driver.find_elements_by_xpath("//div[@class='wrap']"): 
...  for ent in i.find_elements_by_xpath('.//p[@class="partial_entry"]'): 
...   print ent.text 
...   if i.find_elements_by_css_selector('#REVIEWS .googleTranslation>.link'): 
...    print 'translation available' 
...  print # output clarity 
... 

, 왜 혼합 것들? 하나의 패턴을 고수하십시오.

관련 문제