使用Selenium无法找到元素

时间:2018-03-19 06:03:22

标签: javascript python-3.x selenium css-selectors

我是Selenium和HTML的新手。我使用Selenium WebDriver测试网站,但驱动程序无法找到元素。

我的代码是:

browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
data = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#search_result_former > div.re-content.search-mode-content > div.list-container > ul > li:nth-child(1) > div > div.item-footer > div > a:nth-child(1)')))

HTML是:

<div class="btn-group clear">
                        <a href="javascript:;" class="btn btn-operation" role="detail">详览</a>
                        <a href="javascript:;" class="btn btn-operation" role="lawState" an="CN201820052763" pn="CN207117855U">法律状态</a>
                        <a href="javascript:;" class="btn btn-operation" role="proposor" _name="信阳农林学院;" _address=" 河南省信阳市羊山新区新24大街信阳农林学院;" _zipcode="464000;" _country="">申请人</a>
                        <a href="javascript:;" role="addAnalysis" class="btn btn-operation">+ 分析库</a>
                        <a href="javascript:;" role="favorite" class="btn btn-operation">收藏</a>
                        <a href="javascript:;" role="translate" _id="CN201820052763.420180316XX" class="btn btn-operation btn-translate">翻译</a>
                        </div>

运行代码后的结果:

*raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:* 

实际上,我可以看到元素。我的意思是,元素已被加载。我试过了XPATH,但它没有用。

2 个答案:

答案 0 :(得分:0)

根据您共享的 HTML ,您可以使用以下代码行:

  • 通过LINK_TEXT

    wait = WebDriverWait(browser, 10)
    data = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "详览")))
    
  • 通过CSS_SELECTOR

    wait = WebDriverWait(browser, 10)
    data = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@class='btn btn-operation' and contains(.,'详览')]")))
    
  • 通过CSS_SELECTOR

    wait = WebDriverWait(browser, 10)
    data = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.btn.btn-operation[role='detail']")))
    

答案 1 :(得分:0)

使用JavaScript执行器点击一个元素,因为某个时候元素可能被另一个元素覆盖:

driver = webdriver.Firefox()

driver.get("http://stackoverflow.com/questions/7794087/running-javascript-in-selenium-using-python")
driver.execute_script("document.getElementsByClassName('comment-user')[0].click()")