Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python selenium无法迭代元素_Python_Selenium_Web Scraping - Fatal编程技术网

Python selenium无法迭代元素

Python selenium无法迭代元素,python,selenium,web-scraping,Python,Selenium,Web Scraping,我正在尝试翻译tripadvisor的用户评论。 我的密码:- 1.]仅选择葡萄牙语注释(从语言下拉列表中) 2.]然后展开每个注释 3.]然后将所有这些展开的注释保存在列表中 4.]然后将其翻译成英文并打印在屏幕上 from selenium import webdriver from selenium.webdriver.common.by import By import time from selenium.webdriver.support.ui import WebDriverWai

我正在尝试翻译tripadvisor的用户评论。
我的密码:-

1.]仅选择葡萄牙语注释(从语言下拉列表中)

2.]然后展开每个注释

3.]然后将所有这些展开的注释保存在列表中

4.]然后将其翻译成英文并打印在屏幕上

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)
===================错误=================

展开的注释返回空列表。有些评论被保存,有些被跳过。
正确保存第一页(所有注释都已展开),但此后只保存第一条注释,而不进行展开。但是所有页面的翻译评论都被正确地保存在com中,我已经更改了你的代码,现在它可以工作了

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

我已经更改了你的代码,现在它可以工作了

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

你能帮我解决吗?你能帮我解决吗