Python selenium定位动态下拉框
1、下拉框元素需要点击控件才展示
这里可以使用XPAN定位到下拉框,使用driver.find_element(By.XPATH,“路径”).click()进行点击文章来源:https://www.toymoban.com/news/detail-531359.html
2、定位到下拉框里的筛选项元素,每次滚动都会变化
这里的内容要用XPAN定位到//div[@class=“rc-virtual-list-holder-inner”]
然后使用 鼠标滚动的方式,去获取所有的元素名称
方法:文章来源地址https://www.toymoban.com/news/detail-531359.html
def get_text(self,loc, page_name_action,all=False):
# 等待元素可见并获取元素对象
ele = self.wait_ele_visible_and_return_ele(loc, page_name_action,all)
try:
if isinstance(ele,list):
value =[]
for i in ele:
if len(i.text)==0:
continue
else:
value.append(i.text)
my_log.info("获取所有的元素:{} 的文本值。获取结果为:{}".format(loc, value))
else:
value = ele.text
my_log.info("获取元素:{} 的文本值。获取结果为:{}".format(loc, value))
return value
except:
# 失败截图,异常详情写入日志,抛出异常
my_log.exception("获取元素失败!")
# 失败截图 - 页面名字_行为名字_当前时间.png
self.save_page_shot(page_name_action)
raise
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定位动态下拉框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!