python selenium нажмите на несколько кнопок опроса ошибка - PullRequest
0 голосов
/ 04 июля 2018
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get('https://wj.qq.com/s/2214142/51db') # survey link

# First page - click "Next" button, it works
button = browser.find_element_by_class_name('survey_nextpage') # it works
button.click()


# Second page - click one of the scale button between 1-5 
# it always clicks the first button found. how to set to randomly 
# choose from one of the five buttons?

answer = browser.find_element_by_class_name('star_item') 
answer.click() 

Я новичок в селене и тестирую свой код по ссылке на сайте опроса.

Первая страница - она ​​успешно нажимает кнопку «Далее».

Вторая страница - содержит первую кнопку, которая обозначает шкалу 1-5. Мой код всегда нажимает первую найденную кнопку. Моя цель состоит в том, чтобы случайным образом выбрать кнопку в масштабе 1-5 и щелкнуть ее. Я пытался написать цикл, но он не работает.

Любые предложения будут с благодарностью. Спасибо.

Ответы [ 3 ]

0 голосов
/ 04 июля 2018
import random

options = browser.find_elements_by_xpath("//*[starts-with(@class, 'star_item')]") 

option = random.choice(options)
option.click()
0 голосов
/ 04 июля 2018

Допустим, у вас есть 5 кнопок с тегом <button>. Затем вы можете найти эти кнопки следующим образом:

answers = browser.find_elements_by_xpath('xpath') # gives a list with 5 elements (buttons)

PS Если вы предоставите блок HTML со всеми 5 кнопками, я найду для них xPath. Затем вы хотите случайно выбрать одну из этих кнопок. Вы можете сделать так:

import random

list = [20, 16, 10, 5];
random.shuffle(list)
print ("Reshuffled list : ",  list)

random.shuffle(list)
print ("Reshuffled list : ",  list)

Выход:

Reshuffled list :  [16, 5, 10, 20]
reshuffled list :  [20, 5, 10, 16] 

В вашем случае это было бы так:

import random

answers = browser.find_elements_by_xpath('xpath')
random_list = list(range(len(answers))) # creates a list with ascending numbers 0 ... len(answers)
random.shuffle(random_list)
answers[random_list[0]].click() # click randomly on one of the buttons
0 голосов
/ 04 июля 2018

Если все элементы имеют одинаковое имя класса, вы можете использовать множественное число elements, чтобы использовать функцию, которая возвращает список элементов, а не только первый:

answers = browser.find_elements_by_class_name('star_item') 
answers[2].click() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...