【问题标题】:How to press such a button through Selenium?如何通过 Selenium 按下这样的按钮?
【发布时间】:2021-07-04 19:22:16
【问题描述】:
<span class="">
        <a id="id3cc" href="javascript:;">TEXT</a>

        <div id="id3df">
            
        </div>
    </span>

问题在于 id 是动态的。我试图绑定到文本,但这有时会引发错误(在调试器中有效,但在简单运行时无效)。这是我的代码和错误。

button = driver.find_element_by_xpath('//a[contains(text(),"TEXT") ]')
driver.execute_script("arguments[0].click();", button)

这会引发错误 没有这样的元素:无法找到元素:

no such element: Unable to locate element: {"method":"xpath","selector":"//a[contains(text(),"Показать контактную информацию") ]"}
  (Session info: headless chrome=89.0.4389.82)

你还能怎么到达这条线?

【问题讨论】:

  • 你能分享一个指向那个网页的链接吗?

标签: python selenium parsing


【解决方案1】:

您可以通过显式等待来绑定它,我建议您使用PARTIAL_LINK_TEXT,因为文本位于锚标记之间。

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "text between a tag"))).click()

进口:

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

【讨论】:

    【解决方案2】:

    我想您应该添加等待/延迟,直到页面加载并且您尝试访问的元素被加载。
    也可能您必须将该元素滚动到视图中。
    像这样:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    driver = webdriver.Chrome(executable_path='chromedriver.exe')
    wait = WebDriverWait(driver, 20)
    actions = ActionChains(driver)
    
    element_xpath = "//a[contains(text(),'Показать контактную информацию')]"
    
    driver.get("your_url")
    wait.until(EC.presence_of_element_located((By.XPATH, "element_xpath")))
    element = driver.find_element_by_xpath('element_xpath')
    actions.move_to_element(element).build().perform()
    time.sleep(0.5)
    element.click()
    

    【讨论】:

      【解决方案3】:

      尝试使用完整的 xPath,或者您可以巧妙地使用为父元素编写一些 xPath,然后从那里开始。 例如在 URL www.google.com 搜索栏可以有多种定位方式

      full XPath = /html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input
      short xpath = //form[@action="/search"]/div/div/div/div/div[2]/input
      

      或者您可以使用查找所有&lt;a&gt; 标签,然后在列表中找到您的a 标签并单击它。

      【讨论】:

      • 不要尝试。这个建议不好。
      猜你喜欢
      • 2020-08-15
      • 2016-07-09
      • 2018-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多