代码之家  ›  专栏  ›  技术社区  ›  Aric

Selenium在调试期间正常,但运行单击失败

  •  1
  • Aric  · 技术社区  · 7 年前

    我已经找到了几种解决方案,但都没有成功。 这是我的密码

    driver = webdriver.PhantomJS()
    driver.get('https://baijia.baidu.com')
    wait = WebDriverWait(driver,10)
    wait.until(EC.element_to_be_clickable((By.ID, 'getMoreArticles'))).click()
    content = driver.page_source
    page = open('test.html','wb')
    page.write(content)
    

    我尝试调试代码,它成功返回单击的页面。 当我运行代码时,它也会成功返回,但是它不会返回单击的页面,只返回源页面。

    我尝试搜索解决方案,将页面向下移动到底部:

    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)",element)
    

    但结果是一样的,只是调试成功了。

    谢谢

    2 回复  |  直到 7 年前
        1
  •  1
  •   suit    7 年前

    您的按钮似乎启动了一个AJAX请求。驱动程序不会等待它完成,因为没有页面重新加载。因此,应该添加显式等待。诸如此类:

    expected_number_of_articles = 10 # enter your number
    article_locator = (By.CSS_SELECTOR, 'div#article') # enter your locator
    wait.until(lambda driver: len(driver.find_elements(*article_locator)) >= expected_number_of_articles)
    
        2
  •  0
  •   Nimish Bansal    7 年前

    在访问页面源之前,请等待一个小间隔以等待页面加载

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    import time
    driver = webdriver.Firefox()
    driver.get('https://baijia.baidu.com')
    wait = WebDriverWait(driver,10)
    wait.until(EC.element_to_be_clickable((By.ID, 'getMoreArticles'))).click()
    time.sleep(4)
    content = driver.page_source
    page = open('test3.html','w')
    page.write(content)