ajax填充菜单选项

时间:2016-06-10 03:23:20

标签: python selenium selenium-webdriver

这里有严重的问题。有人请帮忙。

我正在尝试登录网站。 - 这个工作!

登录后重定向到我想要的页面 - 这有效!

现在进入后,我必须将鼠标悬停在 设置图标上,以便下拉列表显示,然后点击“设置”选项无ID或CLASS或HREF

现在我有几个原因无法做到这一点。数字1是如果我在悬停后尝试点击链接,它告诉我它是隐藏的,我无法与它进行交互。此外,表格中的菜单选项会在您悬停时通过ajax进行填充和追加。它们不在初始页面加载上。

wait = WebDriverWait(driver, 10) 

box = wait.until(EC.visibility_of_element_located((By.ID, "yucs-help_button"))) 

menuButton = driver.find_element_by_id("yucs-help_button") 

ActionChains(driver).move_to_element(menuButton).perform()

在部署上述代码之后,我打印了driver.page_source并且可以看到(下面)新菜单选项在那里,如果你没有悬停,下面的代码将不在页面上。

现在,我试图点击的<a><span>Settings</span>选项,而对于我的生活,它将无效。无法找到它,无法点击,无法与之互动等等,xpathcss_selectorpartial_name,没有找到这个东西。还有一点奇怪的是,一旦你点击它,从浏览器中,它会将一个ID附加到<span>这太奇怪了。有什么想法吗?

<a data-ylk="rspns:nav;t3:tl-lst;t5:custitm;slk:custitm;elm:itm;elmt:custitm;itc:0;cpos:2" class="C(#000)! Td(u):h " data-mad="options" data-customevt="true" href="#" data-rapid_p="18"><span>Settings</span></a>

1 个答案:

答案 0 :(得分:0)

要在元素上执行mouse over事件,您应该尝试使用.execute_script()后面的java script: -

wait = WebDriverWait(driver, 10) 
box = wait.until(EC.visibility_of_element_located((By.ID, "yucs-help_button"))) 
menuButton = driver.find_element_by_id("yucs-help_button") 

driver.execute_script("var clickEvent = document.createEvent('MouseEvents');clickEvent.initEvent('mouseover', true, true); arguments[0].dispatchEvent(clickEvent);", menuButton)

现在成功mouse over后,您应该尝试点击Settings链接,如下所示: -

driver.find_element_by_xpath("//span[contains(text(), 'Settings')]/parent::a[@data-mad = 'options']").click()

希望它会对你有所帮助.. :)