Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium:单击a href=";javascript:()”;_Javascript_Python_Selenium - Fatal编程技术网

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

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

我正在使用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>

单击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查看我的答案更新,并让我知道状态。