求助:selenium中ActionChains的perform()报错问题

pupilming 2018-07-23 08:42:23
学习一个简单的拖拽动作,原样代码
from selenium import webdriver
from selenium.webdriver import ActionChains
# 交互动作
browser = webdriver.Chrome()
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_elements_by_css_selector('#draggable')
target = browser.find_elements_by_css_selector('#droppable')
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()
出现下面的错误,没太看懂,求大神指点
Traceback (most recent call last):
File "D:/Programming Practice/Crawler/test_selenium/test_04.py", line 12, in <module>
actions.perform()
File "C:\Users\acm\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\common\action_chains.py", line 83, in perform
action()
File "C:\Users\acm\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\common\action_chains.py", line 293, in <lambda>
Command.MOVE_TO, {'element': to_element.id}))
AttributeError: 'list' object has no attribute 'id'
不加最后一句actions.perform()的话没有拖拽动作也不报错。
...全文
1111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vampire215500 2020-08-30
  • 打赏
  • 举报
回复
看最后一行报错就知道 原因了: AttributeError: 'list' object has no attribute 'id' source = browser.find_elements_by_css_selector('#draggable') target = browser.find_elements_by_css_selector('#droppable') 这两个是 find_element 不是 find_elements 。不用加 s
easy_zdd 2019-07-09
  • 打赏
  • 举报
回复
有可能是定位到的element不唯一导致的
baidu_33704011 2018-10-14
  • 打赏
  • 举报
回复
同问,类似,但不一样
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_xpath("//*[@id=\"lg\"]/map/area")
# driver.find_element_by_css_selector("#lg > map > area")
ccl = ActionChains(driver)
ccl.context_click(driver)
ccl.send_keys(Keys.ARROW_DOWN)
ccl.send_keys(Keys.ENTER)
ccl.perform()
# ActionChains(driver).context_click(driver).perform()
# ccl.send_keys(Keys.ARROW_DOWN).send_keys(Keys.ENTER).perform()
time.sleep(3)
driver.quit()

加上ccl.perform()就报错,不加上的话,不报错也不执行步骤,请问在做的大神有没有能解答的
superlazybug 2018-07-24
  • 打赏
  • 举报
回复
find_elements得到的不是driver对象,是一个存储了对象的list,执行事件的对象应该是一个driver对象,所以你应该对find_elemenets得结果进行处理,获取具体的对象,然后进行后边的操作
ghostgoodbye 2018-07-24
  • 打赏
  • 举报
回复
应该是find_element_by_css_selector, 多了一个s

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧