Selenium: получение следующего нажатия кнопки контента - PullRequest
0 голосов
/ 29 августа 2018

На веб-сайте Quora я пытаюсь получить имена пользователей для каждого ответа, нажимая кнопку «Просмотреть пользователей», но я не получаю правильных результатов. Например, на этой ссылке на вопрос Quora у вас есть два ответа: первый с 5 восходящими и второй с 2. Результат, который я получаю из приведенного ниже кода: 5,5.

all_upvotes= browser.find_elements_by_class_name('ExpandedVoterListItem')
for p in all_upvotes:
    p.click()
    time.sleep(10)

    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'div.modal_content.modal_body'))) 

    upvoter_name = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'span.feed_item_answer_user'))) 

    time.sleep(10)
    print ('number of upvoters found for this answer %d' % len(upvoter_name)) 
    # print upvoters names
    for line in upvoter_name:
           print(line.text)

1 Ответ

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

Похоже, вы не выбираете ссылку «Просмотр обновлений» каждый раз, по крайней мере в предоставленном вами сценарии. Вместо этого используйте следующий порядок операций:

all_upvotes= browser.find_elements_by_link_text('View Upvoters') # Finds all "View Upvoters" buttons (they are links actually)
for p in all_upvotes:

    p.click() # Opens list of upvoters

    # No need to sleep or wait for anything else, just wait for items you want, namely the name of upvoter (which is again a link):
    upvoter_name = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'a.user')))

    print ('number of upvoters found for this answer %d' % len(upvoter_name)) 

    # print upvoters names
    for line in upvoter_name:
        print(line.text)

    # Now we need to close list of upvoters, to open the next one on next iteration of the loop:
    close_button = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'span.modal_close'))) 
    close_button.click()
...