suxi 发表于 2016-9-26 15:27:25

selenium+python无法定位网页上弹框的按钮,求指教!

网页上的弹框的按钮一直定位不到,id是动态的,通过xpath相对路径依然无法定位

若尘_51 发表于 2016-9-26 16:21:45

朋友,附个图吧。

huzhaoqiang5566 发表于 2016-9-26 16:52:31

这个弹框是不是个assert呢?

huzhaoqiang5566 发表于 2016-9-26 16:53:24

说错了。是不是alert?

huzhaoqiang5566 发表于 2016-9-26 16:57:13

而且,最后一句好像写错了。既然你把那个元素给了sure变量。那上面那行最后面就不能在跟.click()

suxi 发表于 2016-9-26 17:18:38

本帖最后由 suxi 于 2016-9-27 14:26 编辑

若尘_51 发表于 2016-9-26 16:21
朋友,附个图吧。
#coding=utf-8
from selenium import webdriver

import time

driver=webdriver.Firefox()
driver.get("http://www.inboundmarketing.cn")

#窗口最大化
driver.maximize_window()
#登录
driver.find_element_by_id("username").clear()
driver.find_element_by_id("username").send_keys("???")
driver.find_element_by_id("password").clear()
driver.find_element_by_id("password").send_keys("???")
driver.find_element_by_id("login-btn").click()

time.sleep(2)

#跳转到:用户
driver.find_element_by_link_text("用户").click()
time.sleep(2)

#跳转到:联系人
driver.find_element_by_xpath("//div[@id='left-menu']/div/a/div/div/span").click()

time.sleep(2)
#跳转到联系人分组
driver.find_element_by_link_text("联系人分组").click()

time.sleep(2)
#选择
driver.find_element_by_xpath("//*[@id='group-page-list']/tbody/tr/td/input").click()

time.sleep(2)
driver.find_element_by_xpath("/html/body/div/div/div/div/div/div/a").click()
#delete=driver.find_element_by_tag_name("a").find_element_by_class_name("btn btn-primary")
#delete.click()

time.sleep(5)

sure=driver.find_element_by_xpath("//div[@class_name='modal-content']/div/div/div/button")
sure.click()

time.sleep(3)

suxi 发表于 2016-9-26 17:19:16

huzhaoqiang5566 发表于 2016-9-26 16:57
而且,最后一句好像写错了。既然你把那个元素给了sure变量。那上面那行最后面就不能在跟.click()

已修改,但是还是一样报错

suxi 发表于 2016-9-26 17:20:35

huzhaoqiang5566 发表于 2016-9-26 16:53
说错了。是不是alert?

是的

huzhaoqiang5566 发表于 2016-9-26 21:25:50

suxi 发表于 2016-9-26 17:20
是的

是alert的话,要先接受这个警告。再做处理的。
a=driver.switch_to_alert()
a.accept()

掉渣饼 发表于 2016-9-27 09:45:04

可以参考下面的代码:
#获得当前窗口
nowhandle=driver.current_window_handle
#打开弹窗
driver.find_element_by_name("页面上的删除元素id或者name").click()
#获得所有窗口
allhandles=driver.window_handles
for handle in allhandles:
    #比较当前窗口是不是原先的窗口
    if handle!=nowhandle:
      #获得当前窗口的句柄
      driver.switch_to_window(handle)
      #在当前窗口操作
      dirver.find_element_by_class_name("删除元素class的值").click()
#回到原先的窗口
driver.switch_to_window(nowhandle)

suxi 发表于 2016-9-27 10:16:39

huzhaoqiang5566 发表于 2016-9-26 21:25
是alert的话,要先接受这个警告。再做处理的。
a=driver.switch_to_alert()
a.accept()

alert是不是不可以使用F12中的箭头去获取元素?
我将脚本修改成alert的形式,但是报错
    raise exception_class(message, screen, stacktrace)
NoAlertPresentException: Message: No alert is present
是不是说说明这个并不是alert?
但问了开发,开发说是alert,只是封装起来了

若尘_51 发表于 2016-9-27 11:20:18

本帖最后由 若尘_51 于 2016-9-27 13:54 编辑

suxi 发表于 2016-9-26 17:18
#coding=utf-8
from selenium import webdriver


是你写的脚本有错,我用你的脚本跑了一遍,修改后就可以跑通了(不好意思删除你的一条记录,另外提醒下记得修改下密码,以免别用用心的人利用了):
time.sleep(5)
sure=driver.find_element_by_xpath("//div[@class_name='modal-content']/div/div/div/button")
sure.click()
time.sleep(3)

修改成:
time.sleep(3)
driver.find_element_by_xpath("//*[@class='modal-content']/div/div/div/button").click()
time.sleep(3)

suxi 发表于 2016-9-27 14:19:12

若尘_51 发表于 2016-9-27 11:20
是你写的脚本有错,我用你的脚本跑了一遍,修改后就可以跑通了(不好意思删除你的一条记录,另外提醒下记 ...

问题已解决,非常感谢,也非常感谢提醒!:loveliness:

SunnyLan 发表于 2016-9-27 14:40:40

是不是没有加等待时间?

芒果go 发表于 2016-10-8 15:10:52

suxi 发表于 2016-9-27 10:16
alert是不是不可以使用F12中的箭头去获取元素?
我将脚本修改成alert的形式,但是报错
    raise excep ...

用楼上所说的方法,获取当前窗口,再用for循环,我之前遇到过,封装的alert不能用alert的accept,用句柄应该可以,你试试。
页: [1]
查看完整版本: selenium+python无法定位网页上弹框的按钮,求指教!