Selenium定位元素失败问题

 

selenium元素定位问题

 
 

selenium元素定位问题

最近在玩一个网页游戏,想通过selenium+python做一个自动化脚本,减少重复的人工操作,同时练习一下selenium的使用。

对页面进行分析

地址:http://wan.douyu.com/jyjh/wd/index.html?referer=douyuwancom&frm=jyjh

登录用户名输入框的元素:

<input name="username" id="userName" title="请输入昵称" maxlength="50" placeholder="请输入昵称" type="text">

登录密码输入框的元素:

<input name="username" id="userPass" title="请输入密码" maxlength="50" placeholder="请输入密码" type="password">

由此可见,我们可以通过id或者xpath来定位输入框元素:

driver = webdriver.Firefox()
url = "http://wan.douyu.com/jyjh/wd/index.html?referer=douyuwancom&frm=jyjh/"

driver.get(url)
time.sleep(5)
driver.find_element_by_id("userName").send_keys("******")
driver.find_element_by_xpath("userPass").send_keys("******")

 

这样可行吗??? 

答案当然是不行的,这个时候我就陷入了深深的疑惑中,肯定是哪里出了问题,但是我找不到。

重新分析页面

后来一想,id不能定位,xpath呢?

使用Firefox的view xpath查看一下页面的xpath,结果发现,这个页面上根本不显示登录模块:

Alt text

这就很尴尬了,所以这个登录模块是在哪呢?
继续一查,发现问题了:

<iframe style="display: inline;" id="log-url" src="http://www.douyu.com/member/login/to37wan/micrologin/?forward=http%3A%2F%2Fwan.douyu.com%2Fjyjh%2Fwd%2Fserver.html%3Freferer%3Ddouyuwancom%26frm%3Djyjh" allowtransparency="true" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" height="100%" width="100%"></iframe>

 

 

在登录输入框节点的上面有一个iframe,也就是说,这个登录模块的元素在iframe中,selenium同样也可以定位到iframe中的元素:

url = "http://wan.douyu.com/jyjh/wd/index.html?referer=douyuwancom&frm=jyjh/"

driver.get(url)
time.sleep(5)
#切换至iframe模块 driver.switch_to.frame(
"log-url") driver.find_element_by_id("userName").send_keys("******") driver.find_element_by_id("userPass").send_keys("******")

 

 

就是这个driver.switch_to.frame()方法
返回原来的界面可以用driver.SwitchTo().DefaultContent()方法

至此,解决了登录页面元素定位问题,迈出了第一步。

 
posted on 2016-07-20 10:41  TestJ  阅读(878)  评论(0编辑  收藏  举报