相信大多数的Selenium初学者都会遇到莫名其妙的定位的element找不到的报错,其实除了人为的粗心写错语法、属性值、又或者还没有等待所需要定位的element在页面加载完成外,主要原因是框架跳转和超链接跳转的问题。
关于超链接跳转的多窗转换,这里就不再重复介绍,详细可用看我之前博客的测试文章。如下图,在登录后,例如“企业网站”的 “去管理”这个超链接的 label,是在 iframe这框架里,所以在定位前,必须先跳转到这个框架里。由于该网站对所有超链接都是用 js 去隐藏达到反爬目的,因此在我们定位点击后,就会自动打开新的标签页,然后通过窗口转换,就可以爬取相对应的 URL 。
在自动化测试中,除了要熟练掌握定位之外,还需要掌握前端的通过 js 对 各种 element attribution value 的 增、删、改方法。相关的方法可以参考我之前的博客。
browser.switch_to_frame('mainFrame')
link = browser.find_element_by_link_text('去管理>')