Selenium2 + Python3.6实战(二):登录126邮箱
遇到问题:定位用户名和密码时,总是定位不到
解决过程:
126登录界面,定位用户名和密码时,总是定位不到,后来发现用户名和密码是在一个iframe中,使用Firepath插件定位元素,最左侧会显示iframe信息。通过Firepath显示的是当前活跃的iframe的html,想要定位iframe 可以使用firebug插件,右键点击界面任意位置选择:使用firebug定位元素,之后便可以进行iframe定位。
WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这个时候就需要使用switch_to.frame来切换表单,将当前定位的主体切换为frame/iframe表单的内嵌页面。默认情况下直接 driver.find_element_by...的路径是在Top Window。
详细代码:对照定位来选择
from selenium import webdriver
import time
driver = webdriver.Firefox( )
driver.get ("http://www.126.com")
time.sleep(3) #此处一定记得要有时间,否则会抛出异常NoSuchElementException.
#定位并跳转到iframe
driver.switch_to_frame (driver.find_element_by_id ("x-URS-iframe"))
time.sleep(3)
#定位用户名和密码
email = driver.find_element_by_xpath ("//input[@name='email']")
email.clear( )
email.send_keys('XXXXXXX')
time.sleep(5)
passwd=driver.find_element_by_xpath ("//input[@name='password']")
passwd.send_keys("XXXXXX")
#点击确定按钮
driver.find_element_by_xpath ("//form[@id='login-form']/div[@class='m-container']/div[@class='f-cb loginbox']").click( )
time.sleep(5)
driver.quit ( )