Python Selenium:单击a href=";javascript:()”;
我正在使用chromedriver,我有以下网页来源:Python Selenium:单击a href=";javascript:()”;,javascript,python,selenium,Javascript,Python,Selenium,我正在使用chromedriver,我有以下网页来源: <form id="stepLinksForm" name="stepLinksForm" method="POST" target="mainFrame"> <ul> <li> <a href="javascript:submitLink('action_one.htm')">Action One</a> </li> <li&g
<form id="stepLinksForm" name="stepLinksForm" method="POST" target="mainFrame">
<ul>
<li> <a href="javascript:submitLink('action_one.htm')">Action One</a> </li>
<li> <a href="javascript:submitLink('action_two.htm')">Action Two</a> </li>
<li> <a href="javascript:submitLink('action_three.htm')">Action Three</a> </li>
</ul>
</form>
单击href中的任何一个后,浏览器将转到一个新页面,但url保持不变。
我想要实现的是单击第一个href,即
我尝试过通过xpath、link和互联网上建议的其他方法来查找元素,但都不起作用。
如果有人能帮忙,我真的很感激。您可以直接调用javascript代码,而不是单击:
browser.execute_script("submitLink('action_one.htm')")
这相当于javascript:submitLink('action\u one.htm')
或者,您可以通过其文本找到a:
browser.find_elements_by_xpath("//a[contains(text(), 'Action One')]")
要单击第一个href,文本为Action One,可以使用以下选项之一(Python语言绑定艺术):
:linkText
driver.find_element_by_link_text("Action One").click()
:css选择器
driver.find_element_by_css_selector("a[href*='action_one.htm']").click()
:xpath
driver.find_element_by_xpath("//a[contains(@href,'action_one.htm') and contains(.,'Action One')]").click()
更新 由于您无法通过
LINK\u TEXT
,CSS
,XPATH
,甚至在time.sleep()
之后找到元素,因此可以确认元素位于框架内,该框架由
标记表示
现在,您可以通过“Inspect”查看它们,在HTMLDOM中找到元素并遍历HTML。在某个时刻,您会发现一个
标记。抓住
标签的属性,首先切换到预期的帧,然后尝试使用我的答案中提供的定位器策略。在这里,您可以找到有关的详细讨论。这个答案有用吗?请参阅:SO的期望是,用户提问时不仅要进行研究以回答自己的问题,还要分享研究、代码尝试和结果。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参见:感谢您的回复。我尝试了第一种方法,但返回“WebDriverException:消息:未知错误:未定义submitLink”。我之前用.click()尝试了第二个,但它返回的'list'对象没有属性'click',我将发现的内容打印到一个空列表[]。这看起来像是您的页面使用javascript呈现,或者它位于一个容器(iframe)中。请尝试在执行代码之前等待内容呈现(睡眠)。同时尝试查看页面的源代码(不是开发工具查看源代码)一个指向您的页面的实时url也有助于我放置一个time.sleep,但仍然没有任何更改。我无法通过“查看页面源”查看所需的web源,但我通过“检查”查看它们。这意味着什么?而一个实时url又能有什么帮助呢?谢谢。Inspect将看到呈现的html(可能是javascript呈现程序的结果)给出url,以便我们可以帮助您选择正确的数据。所有这些操作都没有错误:无法定位元素。@kelvin查看我的答案更新,并让我知道状态。