【问题标题】:Clicking a span element in a class with python selenium使用python selenium单击类中的span元素
【发布时间】:2021-01-15 23:36:16
【问题描述】:

我正在尝试点击进入本网站的上方/下方部分: https://www.oddsportal.com/soccer/chile/primera-division/curico-unido-o-higgins-CtsLggl6/

HTML 是:

            <li class=" active" style="display: block;"><span class="topleft_corner"></span><span class="topright_corner"></span><strong><span>Over/Under</span></strong></li>

我尝试了以下方法:

overunder=browser.find_element_by_link_text('Over/Under')

overunder=wait(browser, 5).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'Over/Under']")))


overunder=browser.findElement(By.xpath("//span[contains(text(), 'Over/Under']"))

所有这些后跟overunder.click()

但是所有结果都是NosuchElementException

我怎样才能点击这个项目? 我正在尝试访问和抓取此部分后面的 Over/Under 网站。

【问题讨论】:

  • 当我加载页面时,没有带有文本“Over/Under”的此类元素。不过,这个元素是存在的。 <a onmousedown="uid(5)._onClick();return false;" title="Over/Under" href=""><span>O/U</span></a>.

标签: python selenium-webdriver xpath css-selectors webdriverwait


【解决方案1】:

我复制了完整的 xpath,这对我有用:

browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[6]/div[1]/div/div[1]/div[2]/div[1]/div[5]/div[1]/ul/li[5]/a").click()

【讨论】:

    【解决方案2】:

    当我检查您使用 selenium 提供的链接的 page_source 时,我得到了您正在寻找的区域:

    <li class="" style="display: block;"><a onmousedown="uid(5)._onClick();return false;" title="Over/Under" href=""><span>O/U</span></a></li>
    

    我用过

    browser.find_element_by_css_selector("a[title='Over/Under']").click()
    

    这对我有用。

    【讨论】:

      【解决方案3】:

      我看到的不是带有文本 Over/Under 的元素,而是带有文本 O/U

      的元素

      要点击文本为 save 的元素,您可以使用以下任一Locator Strategies

      • 使用css_selector

        driver.find_element(By.CSS_SELECTOR, "a[title='Over/Under'] > span").click()
        
      • 使用xpath:

        driver.find_element(By.XPATH, "//a[@title='Over/Under']/span[text()='O/U']").click()
        

      理想情况下,点击你需要为element_to_be_clickable()诱导WebDriverWait的元素,你可以使用以下Locator Strategies之一:

      • 使用CSS_SELECTOR

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[title='Over/Under'] > span"))).click()
        
      • 使用XPATH:

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@title='Over/Under']/span[text()='O/U']"))).click()
        
      • 注意:您必须添加以下导入:

        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.common.by import By
        from selenium.webdriver.support import expected_conditions as EC
        
      • 浏览器快照:

      【讨论】:

      • @BlackElefant 很高兴能为您提供帮助。请accept answer 点击我的answer 旁边的空心刻度线,该刻度线就在 votedown 箭头下方,这样刻度线就会转动绿色.
      猜你喜欢
      • 1970-01-01
      • 2017-11-23
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      相关资源
      最近更新 更多