参考https://testerhome.com/topics/18640
tag name定位
使用h1、a、span这种标签定位.
browser.find_element_by_tag_name("span").click()
定位选择顺序
id > class > name > link_text > xpath > css
frame切换
是HTML元素,它定义了一个特定区域,另一个HTML文档可以在里面展示.
<html>
<frameset cols="25%,50%,25%">
<frame src="/example/html/frame_a.html"> <frame src="/example/html/frame_b.html"> <frame src="/example/html/frame_c.html">
</frameset> </html>
由此可见不同的frame包含不用的元素里里边.
douban⽹⾸⻚为例例,通过元素检查登录区域是一个frame区域
那⽤⾃动化脚本点击"密码登录"按钮,代码如下:
from selenium import webdriver
browser = webdriver.Chrome(executable_path="/Users/xinxi/PycharmProjects/selenium_demo/webdriver/chromedriver_mac") # executable_path来指定chromedirver路路径
browser.get("https://www.douban.com")
print("登录douban")
browser.find_element_by_class_name('account-tab-account').click()
print("点击密码登录")
错误提示如下:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
{"method":"class name","selector":"account-tab-account"}
修改代码如下:
browser.switch_to.frame(browser.find_elements_by_tag_name("iframe")[0]) print("切换frame") browser.find_element_by_class_name('account-tab-account').click() print("点击密码登录")
此时代码运行正常,说明点击"元素"之前说明需要切换到该frame上. selenium提供了了switch_to.frame方法
用法如下:
driver.switch_to.frame('frame_name') # 使⽤用名字
driver.switch_to.frame(0) # 使⽤用名字 # 使⽤用位置序号 driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0]) # 使⽤用标签序号
总结:在代码编写过程中,切换frame遇到了问题,可以用标签名定位,得到frame节点对象数组,然后索引数组,得到我们要的节点对象,然后作为参数传入frame切换方法。