问题1
如何查找iframe中的元素
发票查验成功后,会进入到发票详情界面,此界面发票数据是内嵌到iframe中的,通过常规方法无法获取到页面元素,需要处理下iframe。
方法如下:
在查找页面元素前,切换到iframe框架,
from selenium import webdriver
driver = webdriver.Chrome() # 注意,此处Chrome的C是大写的,写成小写不报错,但其实是错误的
driver.switch_to.frame('iframe元素ID') # 此处iframe元素id是 dialog-body
#切换iframe后可以查找元素
driver.find_element_by_id(element_ID)
driver.find_element_by_xpath(element_xpath)
问题2
特殊字符串不能显示,如何处理 ?
通过logger模块打印发票的大写金额,前面有一个特殊字符⊗,如下图:
因为这里获取到的字符串,特殊字符是没有意义的,将其去掉即可。
如获取到 jshjdx_zp = '⊗柒万叁仟伍佰零贰圆玖角柒分'
通过字符串切片方法,去掉⊗, 即jshjdx_zp[1:]
问题3
捕获元素获取异常
HTML元素获取成功, 会返回元素信息,如果获取失败,会抛出异常。
如果判断元素是否获取成功,可以使用下面方法:
try:
self.mBrowser.find_element_by_xpath(strXpathID)
return True
except:
return False
如果想捕获特定的异常,可以导入selenium相关异常的包后,进行异常捕获,如下:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome()
#定义元素是否存在函数
def isExistElementByXpath(strXpathID)
try:
driver.find_element_by_xpath(strXpathID)
return True
except NoSuchElementException as msg:
return False