ElementNotVisibleException用于下一页按钮单击的Python / Selenium错误

时间:2017-06-16 13:52:51

标签: python-3.x selenium

我想弄清楚如何使用selenium在新闻发布页面上执行下一页点击。这是我的代码将转到正确的网站并执行搜索以获取正确的新闻发布文章主题页面。此站点已配置为在搜索执行后查看第1页上的每个新闻稿,您还必须选择页面底部的“更多新闻结果”按钮。我能够毫无问题地进入整页1新闻部分。这是执行搜索和页面点击的代码。

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

browser = webdriver.Chrome()
browser.get('http://www.businesswire.com/portal/site/home/')
search_box_element = browser.find_element_by_id('bw-search-input')
search_box_element.clear()
search_box_element.send_keys('biotechnology')
search_box_element.send_keys(Keys.ENTER)
search_box_element_two = browser.find_element_by_id('more-news-results')
search_box_element_two.click()

这部分代码工作正常但我希望能够点击下一个按钮移动到第2页然后转到第3页,依此类推。这是我认为可行的代码,但它没有:

next_page_click_element = browser.find_element_by_class_name("bw-paging-next")
next_page_click_element.click()

这部分代码会抛出错误:

selenium.common.exceptions.ElementNotVisibleException: Message: 
element not visible

我也尝试过使用

next_page_click_element = browser.find_element_by_xpath('//*[@id="more-news-pagination"]/div/div[1]/div/a')

但得到了相同的错误消息。我还尝试使用等待,在next_page_click_element部分之前添加这些代码行。

element_present = EC.presence_of_element_located((By.ID, "bw-paging-next"))
WebDriverWait(browser, 10).until(element_present)

虽然这确实导致程序等待,但它会返回以下错误消息:

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

非常感谢任何有关如何解决此问题的建议。

1 个答案:

答案 0 :(得分:1)

以下是您的问题的答案:

关于解决方案的几句话 -

  1. 由于Page 2Page 3Next等元素位于页面底部,您必须向下滚动才能将这些元素带入Viewport。< / LI>
  2. 向下滚动后,您可以考虑在HTML DOM上正确定位元素ExplicitWait
  3. 以下是您自己的代码,其中包含一些简单的调整,最后会滚动到页面底部,然后点击Next链接:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    browser=webdriver.Chrome("C:\\Utility\\BrowserDrivers\\chromedriver.exe")
    browser.get('http://www.businesswire.com/portal/site/home/')
    search_box_element = browser.find_element_by_id('bw-search-input')
    search_box_element.clear()
    search_box_element.send_keys('biotechnology')
    search_box_element.send_keys(Keys.ENTER)
    search_box_element_two = browser.find_element_by_id('more-news-results')
    search_box_element_two.click()
    last_height = browser.execute_script("return document.body.scrollHeight")
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    next_page_click_element = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.XPATH, "//div[@id='more-news-pagination']/div/div/div/a[text()='Next']"))
    )
    next_page_click_element.click()
    
  4. 如果这回答你的问题,请告诉我。