Python 有没有办法找到这个按钮(如果它是一个按钮)并点击它?

Python 有没有办法找到这个按钮(如果它是一个按钮)并点击它?,python,python-3.x,selenium,Python,Python 3.x,Selenium,我试着连续点击在线游戏的一些按钮。看一看这本书可能会有所帮助。 以下是与按钮相关的主要html的一部分: <div class="grid x5" id="grid"> <div style="opacity: 1;"><span class="box" style="z-index:92"></span>1</div> #⬅Each of this lines are a button. <div style="

我试着连续点击在线游戏的一些按钮。看一看这本书可能会有所帮助。 以下是与按钮相关的主要html的一部分:

<div class="grid x5" id="grid">
    <div style="opacity: 1;"><span class="box" style="z-index:92"></span>1</div> #⬅Each of this lines are a button.
    <div style="opacity: 1;"><span class="box" style="z-index:92"></span>2</div>
    <div style="opacity: 1;"><span class="box" style="z-index:92"></span>3</div>
    <div style="opacity: 1;"><span class="box" style="z-index:92"></span>4</div>
</div>

1 #⬅每一行都是一个按钮。
2.
3.
4.
到目前为止我得到的最好的:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located

browser = webdriver.Firefox()
browser.get('http://zzzscore.com/1to50/en/')

wave_info = [[25, "//div[contains(@style, 'opacity')]"], [50, "//div[contains(@style, 'opacity')]"]]


n = 1
for wave in wave_info:
    grid_elements = browser.find_elements_by_xpath(wave[1])
    while n <= wave[0]:
        for item in grid_elements:
            if int(item.text) == n:
                item.click()
                n += 1
从selenium导入webdriver
从selenium.webdriver.common.by导入
从selenium.webdriver.common.keys导入密钥
从selenium.webdriver.support.ui导入WebDriverWait
从selenium.webdriver.support.expected_条件导入位于的_元素的存在
browser=webdriver.Firefox()
browser.get('http://zzzscore.com/1to50/en/')
wave_info=[[25,“//div[contains(@style,'opacity')]”,[50,“//div[contains(@style,'opacity')]”]]
n=1
对于波浪信息中的波浪:
grid\u elements=browser。通过xpath查找元素(wave[1])
when n错误
当框/按钮开始消失时,您收到的错误将在游戏的最后阶段抛出。一旦一个框消失,调用
项。text
将返回
None
,无法转换为
int

解决方案
导入时间
从selenium.common.exceptions导入StaleElementReferenceException
wave_info=[[25,“//div[contains(@style,'opacity')]”,[50,“//div[contains(@class,'second')]”]]
时间。睡眠(2)
n=1
对于波浪信息中的波浪:
时间。睡眠(.1)
grid\u elements=browser。通过xpath查找元素(wave[1])

而n有一种更优雅的方法:

x = range(1, 51)
for number in x:
    element = browser.find_element_by_xpath('//div[text()= "' + str(number) + '"]')
    element.click()

我们应该如何测试这个?共享您的所有代码并检查您的chromedriver配置。@Hatt我刚刚做了。string对象没有属性单击“WebDriver”对象没有属性“item”它可以工作,但在单击多个按钮后显示:ValueError:int()的文本无效,以10为基数:“”相同的resultupdated。我认为你应该删除你的答案或者更新它。虽然它在大约11秒内完成游戏,而且速度非常快,但我想知道是否有更快的脚本。@pautodiactic否idea@Pautodidactic我想你应该试试另一种编程语言。@user13090170我修复了上面的解决方案,它可以在大约6秒钟内解决问题,因为它不会一直点击:(你删除了你的帐户
import time
from selenium.common.exceptions import StaleElementReferenceException

wave_info = [[25, "//div[contains(@style, 'opacity')]"], [50, "//div[contains(@class, 'second')]"]]
time.sleep(2)
n = 1
for wave in wave_info:
    time.sleep(.1)
    grid_elements = browser.find_elements_by_xpath(wave[1])
    while n <= wave[0]:
        for item in grid_elements:
            try:
                if int(item.text) == n:
                    item.click()
                    n += 1
            except ValueError:
                continue
            except StaleElementReferenceException:
                break
x = range(1, 51)
for number in x:
    element = browser.find_element_by_xpath('//div[text()= "' + str(number) + '"]')
    element.click()