Web自动化-元素定位作业
作业一:实现web端网易云的基于QQ登录的自动化操作
1 from selenium import webdriver 2 from time import sleep 3 4 #获取浏览器驱动 5 driver=webdriver.Chrome() 6 #访问网易云网址 7 driver.get('http://music.163.com') 8 #浏览器设置为最大 9 driver.maximize_window() 10 #点击登录按钮 11 driver.find_element("xpath",'//a[text()="登录"]').click() 12 #点击选择其他登录方式 13 sleep(3) 14 #点击选择其他登录模式 15 driver.find_element('xpath','//a[text()="选择其他登录模式"]').click() 16 #同意《服务条款》《隐私政策》《儿童隐私政策》 17 driver.find_element('xpath','//input[@type="checkbox"]').click() 18 #点击qq登录 19 driver.find_element('xpath','//a[text()="QQ登录"]').click() 20 21 # 获取全部窗口的句柄handle 22 wins= driver.window_handles 23 print("所有页签handle %s" % wins) 24 #切换句柄 25 driver.switch_to.window(wins[1]) 26 sleep(3) 27 #打印句柄的title 28 print(driver.title) 29 #切换iframe.先定位到iframe,再切换 30 frame=driver.find_element('xpath','//iframe[@id="ptlogin_iframe"]') 31 driver.switch_to.frame(frame) 32 33 #定位到帐号密码登录链接 34 qqlogin=driver.find_element('xpath','//*[@id="bottom_qlogin"]/a[1]') 35 t=qqlogin.text 36 print(t) 37 #点击帐号密码登录链接 38 qqlogin.click() 39 # sleep(3) 40 #定位到用户名输入框 41 username=driver.find_element('xpath','//input[@id="u"]') 42 #定位到密码输入框 43 password=driver.find_element('xpath','//input[@id="p"]') 44 #输入用户名 45 username.send_keys('用户名') 46 #输入密码 47 password.send_keys('密码') 48 #点击授权并登陆按钮 49 login=driver.find_element('xpath','//input[@value="授权并登录"]').click()
句柄
1 #切换浏览器页签,可以通过切换句柄来实现 2 # 获取全部窗口的句柄handle 3 wins= driver.window_handles 4 print("所有页签handle %s" % wins) 5 #切换句柄 6 driver.switch_to.window(wins[1]) 7 sleep(3) 8 #打印句柄的title 9 print(driver.title)
iframe
1 #定位的元素在iframe中。 2 # 切换iframe,先定位到iframe,再切换 3 frame=driver.find_element('xpath','//iframe[@id="ptlogin_iframe"]') 4 driver.switch_to.frame(frame) 5 #定位到帐号密码登录链接 6 qqlogin=driver.find_element('xpath','//*[@id="bottom_qlogin"]/a[1]') 7 t=qqlogin.text 8 print(t)
元素悬停
元素悬停:通过ActionChains模块来实现
from selenium import webdriver from selenium.webdriver import ActionChains driver=webdriver.Chrome() driver.maximize_window() driver.get('http://www.baidu.com') el=driver.find_element_by_xpath('//span[@id="s-usersetting-top"]') #元素悬停:通过ActionChains模块来实现 action=ActionChains(driver) action.move_to_element(el).perform()
元素定位中遇到的问题
1.xpath 定位一个元素后,在其所有子节点中查找定位?
使用//在所有子节点中查找。解决的问题是,有的弹出窗中需要先定位到弹出窗,然后定位到列表,最后才能定位到具体的数据。通过在浏览器上直接复制xpath的方式无法进行定位
实例://div[@id="dialogShow"]//div[@class="ag-center-cols-container"]//div[text()="erp系统"]
表示:先找到id="dialogShow",在其所有子节点中查找class="ag-center-cols-container"的元素,然后在class="ag-center-cols-container"下所有的子节点中查找text()="erp系统"。