Python 3.x ElementNotVisibleException下一页Python/Selenium错误按钮单击
我试图弄清楚如何使用selenium在新闻发布页面上执行下一页单击。这是我的代码,它将转到正确的网站并执行搜索以获得正确的新闻稿文章主题页面。此网站的配置是为了在执行搜索后查看第1页上的每个新闻稿,您还必须选择页面底部的“更多新闻结果”按钮。我可以毫无问题地进入完整的第1页新闻部分。这是我执行搜索和页面点击的代码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
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页
,下一页
等元素位于页面底部,因此您必须向下滚动以将这些元素置于页面中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,我认为你走对了方向。谢谢你的帮助。