0

使用 selenium(带有 python 绑定),我正在处理一个几乎完全是 AJAX 的网页;包括超链接。我希望在标签的“onclick”属性中执行 javascript,而不是使用 element.click() 方法:

标签:

<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 是否可以在不修改超链接的情况下重定向浏览器?

4

3 回答 3

4

您可以使用它单击它。

elem.click()

onclick 事件将自动触发。

于 2013-07-25T09:29:06.123 回答
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">

由于脚本中不需要事件,只需将其删除?

于 2013-07-25T07:00:07.143 回答
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()
于 2013-11-18T07:34:00.397 回答