【问题标题】:Python selenium select a dynamic buttonPython selenium 选择一个动态按钮
【发布时间】:2020-11-25 05:00:02
【问题描述】:

我试图选择一个按钮,但我在很多方面都失败了。 源代码如下所示:

<div class="sc-fzXfPJ soOmg">
<button type="submit" class="sc-fzXfQu KbRNP SuiButton SuiButton--primary 
   SuiButton--wide">
      <div class="SuiButton-content">
          <div class="SuiButton-label">
               <span class="sc-fzXfNh cnQLcv">
                    <p>LET'S GET IT!</p>

当我尝试 xpath 时,它给了我:

/html/body/div[11]/div/div/div[2]/div/div/div/div/div/form/div[3]/button

当我跑步时:

driver.find_element_by_xpath('/html/body/div[11]/div/div/div[2]/div/div/div/div/div/form/div[3]/button').click()

它返回一个错误。按钮文字是:让我们来吧!

我该如何解决这个问题?

【问题讨论】:

  • 您能告诉我们您网页的网址吗?
  • driver.browser.find_element_by_xpath('/html/body/div[11]/div/div/div[2]/div/div/div/div/div/form/div[3] /button').click() 如果有帮助,试试这个。
  • 链接在这里:airjordanretro1highsatinredwom.splashthat.com,我尝试了 chropath,但由于某种原因 xpath 仍然无法正常工作

标签: python css selenium selenium-webdriver xpath


【解决方案1】:

话虽如此,使用绝对 xpath 不是一个好习惯。

尝试一些替代方案:

使用 CSS 选择器:

driver.find_element_by_css_selector("button[type='submit']").click()

使用 Xpath 选择器:

driver.find_element_by_xpath("//button[@type='submit']").click()

或者使用 CSS 选择器无法实现的按钮文本:

driver.find_element_by_xpath('//button[contains(.,"LET\'S GET IT!")]').click()

为避免不必要的超时并在脚本中保持同步,请使用如下所述的显式等待:

wait = WebDriverWait(driver, 20)
wait.until(EC.invisibility_of_element((By.CSS_SELECTOR, "button[type='submit']")))
driver.find_element_by_css_selector("button[type='submit']").click()

为此导入以下包:

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

【讨论】:

    【解决方案2】:

    为此使用绝对 XPath 是个坏主意,因为它们非常脆弱。尝试 ChroPath 扩展并找到相关的 XPath,这应该可以解决问题。

    有时它会滥用内部的值,因此您可能希望从元素中删除文本以获取相对 XPath,而不依赖于值。

    【讨论】:

    • 感谢您的帮助,但我使用 ChroPath,它给我的 xpath 仍然无法正常工作
    【解决方案3】:

    您可以将Xpath 与它的轴一起使用。要了解有关轴的更多信息,您可以click here

    对于您的解决方案,您可以使用此Xpath -

    //p[contains(text(),"GET IT"]/ancestor::button[@type='submit'].

    使用绝对的Xpath 不是一个好主意,因为它很容易损坏,不应该首选。

    如果您遇到任何问题,请告诉我,解决方案是根据您共享的代码给出的。

    【讨论】:

    • 您好,感谢您的帮助,我更新了正在运行的 url。这个 xpath 仍然无法正常工作。
    【解决方案4】:

    这会有所帮助

    driver.find_element_by_xpath("//p[contains(text(),'S GET IT!')]").click()
    

    【讨论】:

    • 我试过了,但它仍然给我错误。感谢帮助
    • 这是什么错误?你能把错误信息贴在这里吗?
    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2019-05-04
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多