Python Selenium_find_elements: индекс списка вне диапазона Ошибка - PullRequest
0 голосов
/ 15 апреля 2020

Хотелось бы получить отзыв в игровом магазине. Однако, когда я прокручиваю страницу вниз, мне нужно нажать кнопку «больше отзывов», чтобы получить больше. Я использовал find_elements_by_class_name и click (), но он выскочил с индексом списка вне диапазона Error. Таким образом, я попытался распечатать, и он показывает '[]'. Я понятия не имею, чтобы решить это.

# 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 ]

0 голосов
/ 15 апреля 2020
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

первый пример

enter image description here

Второй пример

enter image description here

0 голосов
/ 15 апреля 2020

Обновите последнюю строку, как показано ниже.

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

Это потому, что find_elements_by_class_name будет преобразован в css селеном, а . будет добавлен к указателю, указанному здесь. Поскольку у вашего значения есть несколько классов, и поэтому вы должны заменить пробел на .

В качестве альтернативы вы можете использовать ниже.

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

И вы можете использовать find_element_by вместо find_elements.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...