使用selenium(使用python绑定),我正在处理一个几乎完全是AJAX的网页;包括超链接。我没有使用element.click()方法,而是希望在标签的“onclick”属性中执行javascript:
标签:
<a onclick="javascript:setEvent(event);requisition_openRequisitionDescription('requisitionListInterface','actOpenRequisitionDescription',_ftl_api.lstVal('requisitionListInterface', 'requisitionListInterface.listRequisition', 'requisitionListInterface.d327682e687', this),'requisitionList');return ftlUtil_followLink(this);" href="#" title="View this job description" id="requisitionListInterface.reqTitleLinkAction.row1">
代码:
from selenium import webdriver
firefox = webdriver.Firefox()
firefox.get("some_url")
elem = firefox.find_element_by_id("requisitionListInterface.reqTitleLinkAction.row1")
jcode = elem.get_attribute("onclick")
firefox.execute_script(jcode)
错误:
WebDriverException: Message: u'event is not defined' ; Stacktrace:
声明:
我不懂Javascript。据我所知,它期待'事件'变量,但我想它与回调有关?
编辑:
我假设javascript正在修改href属性,但是javascript可以在不修改超链接的情况下重定向浏览器吗?
答案 0 :(得分:4)
您只需点击它即可。
elem.click()
onclick事件将自动触发。
答案 1 :(得分:0)
除非selenium做了一些疯狂的事情,我怀疑,onclick =“javascript:setEvent(event)是无效的javascript。然而,字符串的其余部分是。当执行此代码块时,它会尝试调用一个名为setEvent的函数变量事件,仍未定义。
<a onclick="requisition_openRequisitionDescription('requisitionListInterface','actOpenRequisitionDescription',_ftl_api.lstVal('requisitionListInterface', 'requisitionListInterface.listRequisition', 'requisitionListInterface.d327682e687', this),'requisitionList');return ftlUtil_followLink(this);" href="#" title="View this job description" id="requisitionListInterface.reqTitleLinkAction.row1">
因为您的脚本中没有其他地方需要事件,只需删除它吗?
答案 2 :(得分:0)
from selenium.webdriver.common.action_chains import ActionChains
firefox = webdriver.Firefox()
# You need a mouse to hover the span elements here, and please try this way :)
self.mouse = webdriver.ActionChains(firefox)
# You need get the span element from its xpath:
elem = firefox.find_element_by_id("requisitionListInterface.reqTitleLinkAction.row1")
# Then you hover on span element by mouse and click on it:
self.mouse.move_to_element(elem).click().perform()