为了账号安全,请及时绑定邮箱和手机立即绑定

Python Selenium_find_elements:列表索引超出范围错误

Python Selenium_find_elements:列表索引超出范围错误

慕田峪9158850 2022-10-11 10:28:02
我想从Play商店获得一些评论。但是,当我向下滚动页面时,我需要按下“更多评论”按钮才能获得更多。我使用了 find_elements_by_class_name 和 click(),但它弹出列表索引超出范围错误。因此,我试图打印出来并显示“[]”。我不知道解决它。# open all reviews # urls = ["https://play.google.com/store/apps/details?           id=com.fourdesire.fortunecity"]    url = url+'&showAllReviews=true'driver.get(url)time.sleep(5)  # wait dom ready for i in range(1, 10):    # scroll to load other reviews    print(i)    driver.execute_script(        'window.scrollTo(0, document.body.scrollHeight);')     time.sleep(1)page = driver.page_source  soup_expatistan = BeautifulSoup(page, "html.parser")element2 = driver.find_elements_by_class_name("RveJvd snByac")[0].click()
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

import time

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

from selenium.common.exceptions import TimeoutException

class FindByXpathCss():

        driver = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")

        driver.maximize_window()

        baseUrl = "https://play.google.com/store/apps/details?id=com.delta.mobile.android&hl=en_US&showAllReviews=true"

        driver.get(baseUrl)


        scrolls = 3

        while True:

            scrolls -= 1

            driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")

            time.sleep(3)

            if scrolls < 0:

                break


        buttonClick = WebDriverWait(driver, 30).until(

            EC.visibility_of_all_elements_located((By.XPATH, "//button[contains(@class,'')][contains(text(),'Full Review')]")))

        for element in buttonClick:

            driver.execute_script("arguments[0].click();", element)


        reviewText = WebDriverWait(driver, 30).until(

            EC.presence_of_all_elements_located((By.XPATH, "//*[@class='UD7Dzf']")))



        for textreview in reviewText:

            print textreview.text


        reviewText = WebDriverWait(driver, 30).until(

            EC.presence_of_all_elements_located((By.XPATH, "//*[@class='UD7Dzf']")))



        for textreview in reviewText:

            print textreview.text

第一个例子

//img1.sycdn.imooc.com//6344d4d2000108ed13430560.jpg

第二个例子

//img1.sycdn.imooc.com//6344d4e100019a3c12990570.jpg


查看完整回答
反对 回复 2022-10-11
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

如下更新最后一行。

element2 = driver.find_elements_by_class_name("RveJvd.snByac")[0].click()

那是因为find_elements_by_class_name它将被 selenium 转换为 css.并将被添加到此处提供的定位器中。由于您的值有多个类,因此您必须将空格替换为.

或者,您可以使用以下内容。

driver.find_element_by_xpath("//*[@class='RveJvd snByac']").click()

你可以使用find_element_by相当find_elements


查看完整回答
反对 回复 2022-10-11
  • 2 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号