lengyue869 发表于 2020-12-14 16:08:54

selenium怎么点击JS菜单?


公司内部网站,像这种菜单怎么点击"+"展开?
用元素定位driver.find_element_by_xpath('//*[@id="handler1"]').click(),提示找不到元素..


<div class="TreeNode" nowrap="">
    <a href="javascript:void window.TV.openHandler(1);" target="_self">
      <img id="handler1" src="http://10.123.123.123:8088/EPD3SFC/Images/Rminus.gif" align="absmiddle">
    </a>
    <a target="_self" href="javascript: void window.TV.openFolder(1)">
      <img id="icon1" src="http://10.123.123.123:8088/EPD3SFC/Images/root.gif" align="absmiddle">
    </a>
    <span><a id="node1" class="normal" href="javascript:void(0)" target="_self" onclick="window.TV.setSelected(1)">PCBA</a></span>
</div>

kogawananari 发表于 2020-12-14 21:08:13

这个不是原生html元素吧

lengyue869 发表于 2020-12-14 21:56:02

kogawananari 发表于 2020-12-14 21:08
这个不是原生html元素吧

这个是在浏览器按F12抓出来的

西瓜味的苹果 发表于 2020-12-15 09:29:09

1.看看是否有iframe,有就切换到相应iframe
2.driver.page_source看看源码,你想要的元素是否存在
3.鼠标模拟事件尽量用ActionChains类
4.还是不行,再联系我

lengyue869 发表于 2020-12-15 10:49:11

西瓜味的苹果 发表于 2020-12-15 09:29
1.看看是否有iframe,有就切换到相应iframe
2.driver.page_source看看源码,你想要的元素是否存在
3.鼠标 ...

多谢回复!
有iframe,切换到iframe再点击它下面的元素没反应,我再研究研究..
iframe=driver.find_element_by_tag_name('iframe')
driver.switch_to.frame(iframe)
pcba=driver.find_element_by_xpath('//*[@id="handler101"]')
pcba.click()

西瓜味的苹果 发表于 2020-12-15 10:57:26

你可以写一个js代码(对一个元素添加hover事件),让driver执行,看看是否真的切换成功,如果成功,你在console窗口,写一个对应你操作的js看看成功了就行,然后在程序中直接用js就行了,应该很简单,js会写对吧

西瓜味的苹果 发表于 2020-12-15 10:59:54

还要注意一点的是,查找元素的时候,注意加载等待,你可以用隐式等待或显示等待都可以,你这种情况推荐使用显式等待

lengyue869 发表于 2020-12-15 11:03:46

西瓜味的苹果 发表于 2020-12-15 10:59
还要注意一点的是,查找元素的时候,注意加载等待,你可以用隐式等待或显示等待都可以,你这种情况推荐使用 ...

好的,谢谢!{:5_109:}

lengyue869 发表于 2020-12-15 11:23:39

有两个iframe,第一个是我要找的菜单的,第二个是主窗口的,
用下面的方法都没有切换到iframe

# iframe=wait.until(EC.presence_of_element_located((By.TAG_NAME,'iframe')))
iframe=wait.until(EC.presence_of_all_elements_located((By.TAG_NAME,'iframe')))
# iframe=driver.find_elements_by_tag_name('iframe')
driver.switch_to.frame(iframe)
页: [1]
查看完整版本: selenium怎么点击JS菜单?