1.跳转到Frame/Iframe ,再定位元素 理解:frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,对那个页面里的元素进行定位
1.1方法一 如果iframe有name或id的话,直接使用switch_to_frame("name值")或switch_to_frame("id值")。如下: driver=webdriver.Firefox() driver.get(r'http://www.126.com/') driver.switch_to_frame('x-URS-iframe') #需先跳转到iframe框架 username=driver.find_element_by_name('email') username.clear()
1.1方法二 如果iframe没有name或id的话,则可以通过下面的方式定位: #先定位到iframe elementi= driver.find_element_by_class_name('APP-editor-iframe') #再将定位对象传给switch_to_frame()方法 driver.switch_to_frame(elementi)
PS:完成操作后,可以通过switch_to.parent_content()方法跳出当前iframe,或者还可以通过switch_to.default_content()方法跳回最外层的页面
2.Xpath 层级定位 2.1 通过绝对路径定位 例如:find_element_by_xpath("/html/body/div/div/div[2]/div[3]/a[2]").click()
绝对路径是从当前元素往前数最近的一个html 开始数的。 2.2 利用元素属性定位 地图有三个属性,href,name,class。
driver.findElement(By.xpath("//a[@name='tj_trnews']")).click();
driver.findElement(By.xpath("//a[@href='http://news.baidu.com']")).click()
driver.findElement(By.xpath("//a[@class='mnav']")).click();
driver.findElement(By.xpath("//a[contains(@href,\"http://map.baidu.co\")]")).click();
参考资料:
https://www.cnblogs.com/csj2018/p/9194618.html
https://www.cnblogs.com/yufeihlf/p/5689042.html
http://www.cnblogs.com/yufeihlf/p/5717291.html