Python selenium定位动态下拉框

Python selenium定位动态下拉框

1、下拉框元素需要点击控件才展示
Python selenium定位动态下拉框_第1张图片Python selenium定位动态下拉框_第2张图片

这里可以使用XPAN定位到下拉框,使用driver.find_element(By.XPATH,“路径”).click()进行点击

2、定位到下拉框里的筛选项元素,每次滚动都会变化
Python selenium定位动态下拉框_第3张图片Python selenium定位动态下拉框_第4张图片
这里的内容要用XPAN定位到//div[@class=“rc-virtual-list-holder-inner”]
然后使用 鼠标滚动的方式,去获取所有的元素名称
方法:

    def mouse_move(self,loc,page_name_action):
        try:
            ele = self.wait_ele_visible_and_return_ele(loc, page_name_action) #等待元素出现
            ActionChains(self.driver).move_to_element(ele).perform()  #移动鼠标到该元素上
            my_log.info('移动鼠标到元素:{}'.format(loc))
            return ele
        except:
            my_log.exception('移动鼠标失败')
            self.save_page_shot(page_name_action)
            raise

    def scroll_into_view(self,loc,page_name_action):
        try:
            ele = self.mouse_move(loc,page_name_action)  #调用移动鼠标的方法
            self.driver.execute_script('arguments[0].scrollIntoView(true);', ele) #执行滑动滚动条的操作
            my_log.info(page_name_action)
        except:
            my_log.exception('滚动失败')
            self.save_page_shot(page_name_action)
            raise

    def get_all_select_text(self,loc,page_name_action):
        try:
            before_roll_list = self.get_text(loc, page_name_action, True)[0].split('\n')  #获取当前展示的所有的筛选项名称
            last_loc = (By.XPATH, '//div[text()="{}"]'.format(before_roll_list[-1]))   #获取当前展示的最后一个筛选项元素
            self.scroll_into_view(last_loc,'将筛选项{}滚到顶部'.format(before_roll_list[-1])) #调用滑动滚动条的方法
            after_roll_list = self.get_text(loc, page_name_action, True)[0].split('\n') #获取滑动后所有的筛选项名称
            device_type_text = after_roll_list + before_roll_list   #将两个列表组合成一个新的列表
            if after_roll_list[-1] == before_roll_list[-1]: #判断是否已经滑动到最低端
                my_log.info('“{}”已经是最后一个筛选项'.format(after_roll_list[-1]))
                return list(set(device_type_text))
            else:
                my_log.info('================获取滚动前后的数据================') 
                return list(set(device_type_text + self.get_all_select_text(loc,page_name_action)))
        except:
            my_log.exception('获取元素失败!')
            self.save_page_shot(page_name_action)
            raise

你可能感兴趣的:(python,selenium,开发语言)