Selenium/Python:JavaScript href拒绝执行

2024-06-16 11:53:33 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我在python3.5上运行Selenium,试图单击一个JavaScript函数作为其href的按钮。我尝试过帮助别人的解决办法,但我的问题不会改变。在

版本清单:

  • 硒3.0.2
  • Python4.1.1上的Python3.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>

我尝试过的所有解决方案都会移动到正确框架中的正确元素,看起来好像在执行单击时没有引发任何异常,但是Selenium无法在任何情况下运行脚本。这是令人费解的,因为手动单击打开的webdriver窗口中的链接可以完美地运行并加载下一页。我通过一个webdriver.FirefoxProfile文件()对象。在

下面的xpath(尽管有些混乱)是我找到的移动到正确元素的最佳方法,每次都会找到正确的元素,但是它不会在任何条件下执行脚本。在

^{pr2}$

方法一[失败]:将鼠标直接移动到元素并单击。方法运行时不引发错误或异常。页面不变。JS不执行

action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(choose_account, 0, 0)
action.click()

方法二[失败,错误]:尝试完全按照元素的href值中所写的方式运行脚本。引发异常:

driver.execute_script('SWESubmitForm(document.SWEForm11_0,c_45,"s_11_1_0_0","").click();')

引发的异常:

ReferenceError: SWESubmitForm is not defined

方法三[失败]:尝试在元素上使用JavaScript executor。方法运行时不引发错误或异常。页面不变。JS不执行

driver.execute_script("arguments[0].click();", choose_account)

有人知道这里会发生什么吗?我真的不知所措。在

更新:[已解决] 感谢Lauda建议使用一种更简单/更干净的方式,使用其href和find_element_by_xpath()方法中包含的唯一代码片段来定位定位定位标记。 下面的代码非常有效:

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

Tags: 方法脚本元素driveractionaccountjavascripttr
1条回答
网友
1楼 · 发布于 2024-06-16 11:53:33

尝试使用一个更好的选择器进行常规单击。在

css:a[href*=SWESubmitForm]

使用部分hrefvalue://a[包含(@href,'SWESubmitForm')]

xpath使用fullhrefvalue://a[@href='add_entire_href_value_here']

相关问题 更多 >