Python/Selenium:单击此特定按钮的不同方式
我试图从总体上理解Python,因为我刚刚从使用VBA转换过来。我对你们处理这一问题的可能方式感兴趣。我已经通过直接访问链接绕过了它,但我需要理解并在这里应用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
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选择器,所有这些都是我出于沮丧而删除的
具体问题
我试着阅读下面的链接,但仍然没有用另一种方式成功访问。部分原因可能是因为我还不理解具体的语法。这只是我看过的一些东西。在我来到这里之前,我花了大约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>