как нажать на веб-странице все кнопки с определенным текстом, одну за другой - PullRequest
0 голосов
/ 28 августа 2018

У меня есть эта веб-страница кворы в качестве образца

Содержит 4 кнопки «View Upvoters» Используя этот код, я хочу получить все 4 кнопки, чтобы потом нажимать их один за другим.

upvoter_list = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'AnswerVoterListModalLink')))

print(len(upvoter_list)) дает мне 4, что правильно когда я печатаю текст первого элемента upvoter_list

print(upvoter_list[0].text) 

В результате я получаю 'view upvoters' но когда я печатаю оставшиеся, я получаю пустой результат,

print(upvoter_list[1].text)

в чем проблема?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Попробуйте get_attribute("textContent") вместо text.

Как получить внутренний текст элемента в Selenium?

0 голосов
/ 28 августа 2018

Используйте это (обновлено)

from selenium import webdriver 
from time import sleep
from bs4 import BeautifulSoup
obj = webdriver.Chrome('path to driver')


list_of_upvoters = []
obj.get('https://www.quora.com/Have-you-ever-countined-to-pursue-someone-who-wasnt-interested-in-you')
sleep(5)
obj.execute_script("window.scrollTo(0, document.body.scrollHeight);")
sleep(5)
obj.execute_script("window.scrollTo(0,1);")
sleep(5)

for p in obj.find_elements_by_class_name('AnswerVoterListModalLink'):
    sleep(5)
    p.click()
    sleep(10)
    for div in obj.find_elements_by_class_name('author_info'):
        list_of_upvoters.append(div.find_element_by_class_name('user').text)
    print(list_of_upvoters)
    list_of_upvoters = []
    sleep(10)
    obj.find_element_by_class_name('modal_close').click()
    sleep(10)
...