在python-selenium-webdri中单击带有动态选择器的按钮

2024-10-02 18:21:57 发布

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

我正在做这个自动化的事情,我试图用选择器点击这个按钮

<button id="ember2570" class="ember-view btn btn-default btn btn-default" type="button">    <i class="fa fa-upload"></i>
PDMLink<!----></button>

我试着按id查找元素,但是id会随着每次重新加载而改变,类名也不是按钮所独有的。 如果我尝试包含通配符,比如“ember*”,那么它会在其他地方单击。几乎网页的所有元素都有 id="embersomeRandomNumber” 我无法共享该url,因为它是intranet站点。你知道吗


Tags: viewiddefault元素type选择器button事情
3条回答

正如您所提到的,…ID随着每次重新加载而变化,类名也不是按钮所独有的。。。另外,所需的元素是启用了Ember.js的元素,因此要在元素上click(),您必须为element_to_be_clickable()诱导WebDriverWait,并且可以使用以下Locator Strategy

  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='ember-view btn btn-default btn btn-default' and contains(., 'PDMLink')][.//i[@class='fa fa-upload']]"))).click()
    
  • 注意:必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

使用CSS选择器:

运算符^-匹配以给定值开头的元素。你知道吗

就你而言:

driver.find_element_by_css_selector('button[id^="ember"] i.fa-upload')

使用XPath:

关键字contains匹配包含给定值的元素。你知道吗

driver.find_element_by_xpath("//button[contains(@id,'ember')/i[contains(@class,'fa-upload')]")

编辑:

如果要查找文本为“PDMLink”的按钮:

可以在XPath中使用text

driver.find_element_by_xpath("//button[text()='PDMLink']")

下面是我如何处理这个简单的“问题”:

driver.find_element_by_css_selector("button[id^="ember"] i.fa-upload").click() 

如果单击不起作用,那么您还可以导入密钥并发送密钥(钥匙。返回) 我已经有一段时间没有使用硒了,所以请尝试一下,让我知道。你知道吗

我通常使用我自己去年构建的API,它有type()、find()、find\u path()、find\u id()、click()等函数,所有这些函数的构建都是为了避免capcha cashe构建和避免大多数导致机器人崩溃的“im not a robot”东西。我只是随机使用时间延迟。type()实际上接收字符串,并在一个很小的时间延迟上逐个字符地键入,这个延迟总是随机的,这是最主要的

相关问题 更多 >