Python/Selenium:单击此特定按钮的不同方式

Python/Selenium:单击此特定按钮的不同方式,python,selenium,Python,Selenium,我试图从总体上理解Python,因为我刚刚从使用VBA转换过来。我对你们处理这一问题的可能方式感兴趣。我已经通过直接访问链接绕过了它,但我需要理解并在这里应用 from selenium import webdriver chromedriver = r'C:\Users\dd\Desktop\chromedriver.exe' browser = webdriver.Chrome(chromedriver) url = 'https://www.fake.com/' browser.get

我试图从总体上理解Python,因为我刚刚从使用VBA转换过来。我对你们处理这一问题的可能方式感兴趣。我已经通过直接访问链接绕过了它,但我需要理解并在这里应用

from selenium import webdriver

chromedriver = r'C:\Users\dd\Desktop\chromedriver.exe'
browser = webdriver.Chrome(chromedriver)
url = 'https://www.fake.com/'

browser.get(url)

browser.find_element_by_id('txtLoginUserName').send_keys("Hello")
browser.find_element_by_id('txtLoginPassword').send_keys("There")
browser.find_element_by_id('btnLogin').click()
此时,我正在尝试导航到特定的按钮/链接。 以下是来自页面/元素的信息

 <a href="javascript:void(0)" style="text-decoration:none" onclick="InitiateCallBack('187', 'True', 'T-Mobile', 'https://www.fake.com/', 'TMobile')">T-Mobile</a>
我还试图寻找标签和使用css选择器,所有这些都是我出于沮丧而删除的

具体问题

  • 如何利用内部文本“T-Mobile”单击按钮
  • 如何执行onclick事件

  • 我试着阅读下面的链接,但仍然没有用另一种方式成功访问。部分原因可能是因为我还不理解具体的语法。这只是我看过的一些东西。在我来到这里之前,我花了大约3个小时尝试各种各样的东西

    如何利用内部文本“T-Mobile”单击按钮

    find\u elements\u by\u link\u text
    适用于这种情况

    elements = driver.find_elements_by_link_text('T-Mobile')
    for elem in elements:
        elem.click()
    
    如果你没有完整的文本,还有一个
    by\u partial\u link\u text
    定位器

    如何执行onclick事件

    最简单的方法是简单地调用
    。如上图所示,在元素上单击()

    或者,您可以检索
    onclick
    属性并使用
    driver.execute\u script
    运行js

    for elem in elements:
        script = elem.get_attribute('onlcick')
        driver.execute_script(script)
    
    编辑:

    请注意,在您的代码中,您执行了
    元素。单击
    ——这不会执行任何操作
    element.click()
    (注意参数)调用click方法

    有没有办法利用browser.execute_script()来处理onclick事件

    execute\u script
    可以触发等效事件,但这样做可能会错过更多侦听器。使用元素单击方法是最有效的方法。很可能有很多站点的实现细节会阻碍您的自动化工作,但是这些可能性是无穷的。如果看不到实际情况,很难说。
    您可以使用JS方法单击某个元素或以其他方式与页面交互,但在“正常”使用站点时可能会错过某些事件侦听器;您希望或多或少地模拟正常使用。

    根据您共享的HTML,很明显网站使用JavaScript。因此,要在文本为T-Mobile的链接上
    click()
    ,您必须使用
    expected\u conditions
    子句将WebDriverWait诱导为
    element\u可点击
    ,并且您可以使用以下代码块:

    WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.XPATH, "//a[contains(.,'T-Mobile')]"))).click()
    
    你可以用它

     <div class="button c_button s_button" onclick="submitForm('rMTF')" style="margin-bottom: 30px;">
        <input class="v_small" type="button"></input>
        <span>
              Reset
        </span>
    
    
    重置
    

    非常感谢。我想这可能是因为我正在测试的网站的制作方式,但它没有点击任何东西,但我没有得到任何错误。它是一个项目/单词列表,可以像超链接一样单击,但也可以在其中搜索。我确信这是可行的。我忘了问,但有没有办法利用browser.execute_script()来执行onclick事件?@Noctsol请注意,在代码中您使用了
    元素。单击
    ——这没有任何作用
    element.click()
    (注意参数)调用click方法
    execute\u script
    可以触发等效的事件,但这样做可能会错过更多侦听器。使用元素单击方法是最有效的方法。很可能有很多站点的实现细节会阻碍您的自动化工作,但是这些可能性是无穷的。如果我不了解实际情况,很难说。您可以尝试使用JS方法单击某个元素,但您可能会错过某些事件侦听器。@sytech您的评论中包含了所有的文字,我认为您应该使用所有这些想法更新您的答案,并将您的答案变成一个很好的答案。向上投票@谢谢你的建议。我在答案上加了这个。
     <div class="button c_button s_button" onclick="submitForm('rMTF')" style="margin-bottom: 30px;">
        <input class="v_small" type="button"></input>
        <span>
              Reset
        </span>