python selenium单击多个调查按钮错误

时间:2018-07-04 20:22:53

标签: python selenium selenium-webdriver

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 :(得分:2)

如果所有元素都具有相同的类名,则可以使用复数elements来使用返回元素列表的函数,而不仅仅是第一个元素:

answers = browser.find_elements_by_class_name('star_item') 
answers[2].click() 

答案 1 :(得分:2)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:angle="90"
                android:startColor="#0fb8ad"
                android:endColor="#2cb5e8"
                android:centerColor="#1fc8db"
                android:type="radial" />
        </shape>
    </item>
</selector>

答案 2 :(得分:1)

假设您有5个带有标签<button>的按钮。然后您可以找到以下按钮:

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

如果您为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