Selenium/Python:JavaScript href拒绝执行

Selenium/Python:JavaScript href拒绝执行,javascript,python,selenium,Javascript,Python,Selenium,因此,我在Python3.5上运行Selenium,试图单击一个带有JavaScript函数作为href的按钮。我尝试过帮助他人的解决方案,但我的问题不会改变 版本清单: ReferenceError: SWESubmitForm is not defined 硒3.0.2 蟒蛇4.1.1上的Python 3.5.2 火狐51.0.1 按钮的html如下所示: <tbody> <tr> <td> <a

因此,我在Python3.5上运行Selenium,试图单击一个带有JavaScript函数作为href的按钮。我尝试过帮助他人的解决方案,但我的问题不会改变

版本清单:

ReferenceError: SWESubmitForm is not defined
  • 硒3.0.2
  • 蟒蛇4.1.1上的Python 3.5.2
  • 火狐51.0.1
按钮的html如下所示:

<tbody>
    <tr>
        <td>
            <a href='JavaScript:SWESubmitForm(document.SWEForm11_0,c_45,"s_11_1_0_0","")' tabindex="1700">Choose Account</a>
        </td>
    </tr>
    <tr>
        <td>View a different account</td>
    </tr>
</tbody>
方法一[失败]:将鼠标直接移动到元素并单击。方法运行时不会引发错误或异常。页面不会更改。JS不执行

action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(choose_account, 0, 0)
action.click()
driver.execute_script("arguments[0].click();", choose_account)
方法二[失败,出现错误]:尝试完全按照元素的href值运行脚本。引发异常:

driver.execute_script('SWESubmitForm(document.SWEForm11_0,c_45,"s_11_1_0_0","").click();')
引发的异常:

ReferenceError: SWESubmitForm is not defined
方法三[失败]:尝试在元素上使用JavaScript执行器。方法运行时不会引发错误或异常。页面不会更改。JS不执行

action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(choose_account, 0, 0)
action.click()
driver.execute_script("arguments[0].click();", choose_account)
有人知道这里会发生什么吗?我真是不知所措

M

更新:[已解决] 感谢劳达建议使用一种更简单/更干净的方式,即使用其href中包含的唯一片段和find_元素通过_xpath()方法查找锚定标记。 下面的代码很有魅力:

choose_account = driver.find_element_by_xpath("//a[contains(@href,'SWEForm11_0,c_45')]")
choose_account.click()

尝试使用一个更好的选择器定期单击

css:a[href*=sweimitform]

xpath使用分部
href
value://a[包含(@href,'swessubmitform')]


xpath使用full
href
value://a[@href='add\u intellel\u href\u value\u here']

是否可以尝试添加几秒钟的
时间。在
驱动程序之前睡眠(3)
。通过链接文本(“选择帐户”)查找元素。单击()?同样的结果?Andersson,我尝试了你的“按链接查找元素”文本,效果也不错。看起来问题在于我在最初尝试中使用的笨拙的xpath。这就解决了它。非常感谢。我必须进一步指定,因为在页面侧栏的每个锚标记中都找到了“SWESubmitForm”,所以对我来说,在href中使用唯一的字符串“SWEForm11_0,c_45”是必要的。实际上,第二种建议的方法是不正确的
contains()
contains(@href,'sweimitform')
一样工作,但与
contains(@href='sweimitform')
不同!是的,你是对的,我会更新它,我添加的案例是针对整个价值,而不是其中的一部分。是的,我先尝试了带有“=”的建议,但失败了。使用“,”只需完整href的一小部分就可以完美地工作。更正了我在上面的原始帖子中更新的语法。