Python Selenium:单击a href=“javascript:()”

2024-04-29 01:03:12 发布

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

我正在使用chromedriver,我有以下网页源:

<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>

在单击任何一个ref之后,浏览器将转到一个新页面,但url保持不变。 我想要实现的是单击第一个ref,即 <li> <a href="javascript:submitLink('action_one.htm')">Action One</a> </li>

我试过用xpath查找元素、链接文本和其他一些在互联网上建议的方法,但都不起作用。 如果有人能帮忙,我真的很感激。


Tags: formref网页actionlijavascriptulone
2条回答

要单击第一个文本为Action One的ref,您可以使用以下任一选项(Python Language Binding Art):

  • linkText

    driver.find_element_by_link_text("Action One").click()
    
  • cssSelector

    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_TEXTCSSXPATH找到元素,甚至在time.sleep()之后,都可以很好地确认元素位于由<frame>标记表示的框架内。

现在,当您能够通过“Inspect”看到它们时,在HTML DOM中找到元素,并向上遍历HTML。在某个时刻,您会发现一个<frame>标记。首先获取标签的属性,然后将切换到预期的,然后尝试使用我的答案中提供的定位策略。在这里您可以找到关于How can I select a html element no matter what frame it is in in selenium?的详细讨论

您可以直接调用javascript代码,而不是单击:

browser.execute_script("submitLink('action_one.htm')")

相当于javascript:submitLink('action_one.htm')

或者您可以通过它的文本找到a:

browser.find_elements_by_xpath("//a[contains(text(), 'Action One')]")

相关问题 更多 >