selenium 无法迭代元素 [英] selenium fails to iterate on elements

查看:35
本文介绍了selenium 无法迭代元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试翻译来自 tripadvisor 的用户评论.
我的代码:-

Im trying to translate user comments from tripadvisor.
My code :-

1.]仅选择葡萄牙语评论(从语言下拉菜单中),

1.]Selects only portuguese comments( from language dropdown),

2.]然后展开每个评论,

2.]Then expands each of the comments,

3.]然后将所有这些展开的评论保存在一个列表中

3.]Then saves all these expanded comments in a list

4.]然后将它们翻译成英文&在屏幕上打印

4.]Then translates them into english & prints on screen

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
com_=[] # To save translated comments
expanded_comments=[] # To save expanded comments
driver = webdriver.Chrome("C:\Users\shalini\Downloads\chromedriver_win32\chromedriver.exe")
driver.maximize_window()

def expand_reviews(driver):
    # TRYING TO EXPAND REVIEWS (& CLOSE A POPUP)    
    try:
        driver.find_element_by_class_name("moreLink").click()
    except:
        print "err"
    try:
        driver.find_element_by_class_name("ui_close_x").click()
    except:
        print "err"
    try:
        driver.find_element_by_class_name("moreLink").click()
    except:
        print "err3"




def save_comments(driver):
    expand_reviews(driver)
    # SELECTING ALL EXPANDED COMMENTS
    expanded_com_elements=driver.find_elements_by_class_name("entry")
    time.sleep(3)
    for i in expanded_com_elements:
        expanded_comments.append(i.text)


    # SELECTING ALL GOOGLE-TRANSLATOR links
    gt= driver.find_elements(By.CSS_SELECTOR,".googleTranslation>.link")

    # NOW PRINTING TRANSLATED COMMENTS
    for i in gt:
        try:
            driver.execute_script("arguments[0].click()",i)
            #i.click().perform()
            com=driver.find_element_by_class_name("ui_overlay").text
            com_.append(com)
            time.sleep(5)
            driver.find_element_by_class_name("ui_close_x").click().perform()
            time.sleep(5)
        except Exception as e:
            pass
            #print e



for i in range(282):
    page=i*10
    url="https://www.tripadvisor.com/Airline_Review-d8729164-Reviews-Cheap-Flights-or"+str(page)+"-TAP-Portugal#REVIEWS"
    driver.get(url)
    wait = WebDriverWait(driver, 10)
    if i==0:
        # SELECTING PORTUGUESE COMMENTS ONLY # Run for one time then iterate over pages
        try:
            langselction = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.sprite-date_picker-triangle")))
            langselction.click()
            driver.find_element_by_xpath("//div[@class='languageList']//li[normalize-space(.)='Portuguese first']").click()
            time.sleep(5)
        except Exception as e:
            print e

    save_comments(driver)

================错误==================

================ERROR=================

expanded_comments 返回空列表.有些评论被保存,有些被跳过.第一页被正确保存(所有评论都展开),但此后只有第一条评论被保存,没有被展开.但是来自所有页面的翻译评论会正确保存在 com_

expanded_comments return empty list. Some comments get saved, some get skipped. First page is saved properly (all comments expanded), but thereafter only first comment gets saved, without being expanded. But translated comments from all pages get saved properly in com_

推荐答案

我已经更改了您的代码,现在可以使用了.

I have changed your code and now it's working.

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("./chromedriver.exe")
driver.maximize_window()
url="https://www.tripadvisor.com/Airline_Review-d8729164-Reviews-Cheap-Flights-TAP-Portugal#REVIEWS"
driver.get(url)
wait = WebDriverWait(driver, 10)



# SELECTING PORTUGUESE COMMENTS ONLY
#show_lan = driver.find_element_by_xpath("//div[@class='languageList']/ul/li[contains(text(),'Portuguese first')]")

try:
    langselction = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.sprite-date_picker-triangle")))
    langselction.click()
    driver.find_element_by_xpath("//div[@class='languageList']//li[normalize-space(.)='Portuguese first']").click()
    time.sleep(5)
except Exception as e:
    print e


# TRYING TO EXPAND REVIEWS (& CLOSE A POPUP)    
try:
    driver.find_element_by_class_name("moreLink").click()
except:
    print "err"
try:
    driver.find_element_by_class_name("ui_close_x").click()
except:
    print "err"
try:
    driver.find_element_by_class_name("moreLink").click()
except:
    print "err3"

# SELECTING ALL EXPANDED COMMENTS
expanded_com_elements=driver.find_elements_by_class_name("entry")
expanded_comments=[]
time.sleep(3)
for i in expanded_com_elements:
    expanded_comments.append(i.text)

# SELECTING ALL GOOGLE-TRANSLATOR links
gt= driver.find_elements(By.CSS_SELECTOR,".googleTranslation>.link")

# NOW PRINTING TRANSLATED COMMENTS
for i in gt:
    try:
        driver.execute_script("arguments[0].click()",i)
        #i.click().perform()
        print driver.find_element_by_class_name("ui_overlay").text
        time.sleep(5)
        driver.find_element_by_class_name("ui_close_x").click().perform()
        time.sleep(5)
    except Exception as e:
        pass
        #print e

这篇关于selenium 无法迭代元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆