【问题标题】:Randomly clicking all the tabs for an infinite amount随机单击所有选项卡以获得无限量
【发布时间】:2018-04-15 20:52:45
【问题描述】:

我正在尝试随机单击此page 上所有未打开的选项卡(元素)。

不幸的是,以下内容往往会起作用,使用这种方法似乎并没有点击所有元素。我假设由于某种原因它不喜欢索引中的索引(或者没有正确加载所有索引)。添加while True:,往往会解决这个问题,但我不确定如何随机化无限量。有什么想法吗?

options = driver.find_elements_by_xpath('//*[@class="KambiBC-mod-event-group-header__event-count"]')

indexes = [index for index in range(len(options))]
shuffle(indexes)
for index in indexes:
    time.sleep(1)
    clickMe = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'(//*[@class="KambiBC-mod-event-group-header__event-count"])[%s]' % str(index + 1))))
    driver.execute_script("arguments[0].scrollIntoView();", clickMe)
    clickMe.click()
    time.sleep(1)

添加while True:

while True:
    time.sleep(0)
    #clickMe = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'(//*[@class="KambiBC-mod-event-group-header__event-count"])[%s]' % str(index + 1))))
    clickMe = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '(//*[@class="KambiBC-mod-event-group-header__event-count"])[%s]' % str(index + 1))))
    driver.execute_script("arguments[0].scrollIntoView();", clickMe)
    clickMe.click()
    time.sleep(0)

【问题讨论】:

    标签: python css selenium xpath selenium-webdriver


    【解决方案1】:

    并非所有选项都同时出现,而是一个接一个地按组添加。

    您需要等到所有选项都可用。

    试试下面的代码:

    def get_options_length():
        list_length = len(wait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, '//*[@class="KambiBC-collapsible-header KambiBC-mod-event-group-header"]'))))
        while True:
            time.sleep(1)
            if list_length == len(driver.find_elements_by_xpath('//*[@class="KambiBC-collapsible-header KambiBC-mod-event-group-header"]')):
                break
            else:
                list_length = len(driver.find_elements_by_xpath('//*[@class="KambiBC-collapsible-header KambiBC-mod-event-group-header"]'))
        return list_length
    
    indexes = [index for index in range(get_options_length())]
    shuffle(indexes)
    for index in indexes:
        time.sleep(1)
        clickMe = wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,'(//*[@class="KambiBC-collapsible-header KambiBC-mod-event-group-header"])[%s]' % str(index + 1))))
        clickMe = clickMe.find_element_by_xpath('.//span')
        driver.execute_script("arguments[0].scrollIntoView();", clickMe)
        clickMe.click()
    

    【讨论】:

    • 我似乎得到:indexes = [index for index in range(get_options_length)] TypeError: 'function' object cannot be Explained as an integer
    • 哦,对不起 :) indexes = [index for index in range(get_options_length())]
    • 虽然我现在得到的是修复了该错误:文件“C:/Users/Bain3/PycharmProjects/untitled4/11The unibet.py”,第 1311 行,在 索引 = [index for index in range(get_options_length())] 文件“C:/Users/Bain3/PycharmProjects/untitled4/11The unibet.py”,第 1302 行,在 get_options_length list_length = len(wait.until(EC.presence_of_all_elements_located((By.XPATH, '//*[@class="KambiBC-mod-event-group-header__event-count"]')))) 类型错误:直到()缺少1个必需的位置参数:'方法'
    • 太棒了。所以它点击了其中的一些然后它往往会弹出 Traceback(最近一次调用最后一次):文件“C:/Users/Bain3/PycharmProjects/untitled4/11The unibet.py”,第 1315 行,在 clickMe = wait (驱动程序, 10).until(EC.element_to_be_clickable((By.XPATH,'(//*[@class="KambiBC-mod-event-group-header__event-count"])[%s]' % str(index + 1)))) 文件“C:\Users\Bain3\Anaconda3\lib\site-packages\selenium\webdriver\support\wait.py”,第 80 行,直到引发 TimeoutException(message, screen, stacktrace) selenium。 common.exceptions.TimeoutException:消息:
    • 那是因为每次点击后元素个数减一:收到点击的元素变了,'//*[@class="KambiBC-mod-event-group-header__event-count"]'选择器再也找不到了...检查更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2019-10-08
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多