Python 3.x ElementNotVisibleException下一页Python/Selenium错误按钮单击

Python 3.x ElementNotVisibleException下一页Python/Selenium错误按钮单击,python-3.x,selenium,Python 3.x,Selenium,我试图弄清楚如何使用selenium在新闻发布页面上执行下一页单击。这是我的代码,它将转到正确的网站并执行搜索以获得正确的新闻稿文章主题页面。此网站的配置是为了在执行搜索后查看第1页上的每个新闻稿,您还必须选择页面底部的“更多新闻结果”按钮。我可以毫无问题地进入完整的第1页新闻部分。这是我执行搜索和页面点击的代码 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from

我试图弄清楚如何使用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')
但是得到了同样的错误信息。我还尝试使用wait,在下一个页面单击元素部分之前添加这些代码行

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: 

如果您对如何解决此问题有任何建议,我们将不胜感激。

以下是您问题的答案:

关于解决方案的几句话-

  • 由于
    第2页
    第3页
    下一页
    等元素位于页面底部,因此您必须向下滚动以将这些元素置于页面中
  • 一旦向下滚动,您可能会考虑在HTML DOM上正确地定位元素:<代码>显式等待/代码>。
  • 这是您自己的代码,带有一些简单的调整,最终将滚动到页面底部,并单击
    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()
    

  • 如果这能回答您的问题,请告诉我。

    尝试将
    (By.ID,“bw paging next”)
    替换为
    (By.CLASS\u NAME,“bw paging next”)
    您好,感谢您的回复。不幸的是,这不起作用。用By.CLASS_名称替换By.ID将返回我的原始元素不可见错误消息。更改不会导致出现等待时间。请尝试执行
    下一页\u单击\u元素。位置\u一次\u滚动\u进入\u视图
    ,然后单击也不起作用。我仍然收到原始元素不可见的错误消息。为什么要在
    ExplicitWait
    之前使用
    time.sleep()
    ?:)德班詹布,谢谢你的回复。你的解决方案奏效了。我真的很感激。Georgeanderson,我认为你走对了方向。谢谢你的帮助。